neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit dbb3986f331f416213e8396cfb5a4335d69fc42b
parent c85313bac7e6e0bb4551dc702e8b08574fa80d43
Author: Shadman <shadmansaleh3@gmail.com>
Date:   Tue,  3 Feb 2026 19:01:05 +0600

fix(prompt): ensure prompt-mark col gets reseted properly #37669

problem: currently when empty string is set as prompt the prompt-mark
column doesn't update.

solution: ensure the column is reset to 0 when starting prompt buffer and
before creating a new prompt after prompt-callback.
Diffstat:
Msrc/nvim/eval.c | 1+
Msrc/nvim/optionstr.c | 2+-
Mtest/functional/legacy/prompt_buffer_spec.lua | 31+++++++++++++++++++++++++++++++
3 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/nvim/eval.c b/src/nvim/eval.c @@ -6668,6 +6668,7 @@ void prompt_invoke_callback(void) curwin->w_cursor.lnum = lnum + 1; curwin->w_cursor.col = 0; curbuf->b_prompt_start.mark.lnum = lnum + 1; + curbuf->b_prompt_start.mark.col = 0; if (curbuf->b_prompt_callback.type == kCallbackNone) { xfree(user_input); diff --git a/src/nvim/optionstr.c b/src/nvim/optionstr.c @@ -711,7 +711,7 @@ const char *did_set_buftype(optset_T *args) // Set default value for 'comments' set_option_direct(kOptComments, STATIC_CSTR_AS_OPTVAL(""), OPT_LOCAL, SID_NONE); // set the prompt start position to lastline. - pos_T next_prompt = { .lnum = buf->b_ml.ml_line_count, .col = 1, .coladd = 0 }; + pos_T next_prompt = { .lnum = buf->b_ml.ml_line_count, .col = 0, .coladd = 0 }; RESET_FMARK(&buf->b_prompt_start, next_prompt, 0, ((fmarkv_T)INIT_FMARKV)); } if (win->w_status_height || global_stl_height()) { diff --git a/test/functional/legacy/prompt_buffer_spec.lua b/test/functional/legacy/prompt_buffer_spec.lua @@ -762,4 +762,35 @@ describe('prompt buffer', function() {5:-- INSERT --} | ]]) end) + + it('works correctly with empty string as prompt', function() + api.nvim_set_option_value('buftype', 'prompt', { buf = 0 }) + exec_lua(function() + local buf = vim.api.nvim_get_current_buf() + vim.fn.prompt_setprompt(buf, '') + end) + + source('startinsert') + + -- mark correctly set + eq({ 1, 0 }, api.nvim_buf_get_mark(0, ':')) + + feed('asdf') + screen:expect([[ + asdf^ | + {1:~ }|*8 + {5:-- INSERT --} | + ]]) + + -- can clear all of it + feed('<backspace><backspace><backspace><backspace>') + screen:expect([[ + ^ | + {1:~ }|*8 + {5:-- INSERT --} | + ]]) + feed('<cr>') + + eq({ 2, 0 }, api.nvim_buf_get_mark(0, ':')) + end) end)