diff --git a/src/nvim/eval/buffer.c b/src/nvim/eval/buffer.c index 813d839dfe..80202a8cec 100644 --- a/src/nvim/eval/buffer.c +++ b/src/nvim/eval/buffer.c @@ -800,7 +800,7 @@ void f_prompt_setprompt(typval_T *argvars, typval_T *rettv, EvalFuncData fptr) cursor_col += new_prompt_len - old_prompt_len; } - if (curwin->w_buffer == buf) { + if (curwin->w_buffer == buf && curwin->w_cursor.lnum == prompt_lno) { coladvance(curwin, cursor_col); } changed_lines_redraw_buf(buf, prompt_lno, prompt_lno + 1, 0); diff --git a/test/functional/legacy/prompt_buffer_spec.lua b/test/functional/legacy/prompt_buffer_spec.lua index 2b2f73f5dc..7e704808a3 100644 --- a/test/functional/legacy/prompt_buffer_spec.lua +++ b/test/functional/legacy/prompt_buffer_spec.lua @@ -858,7 +858,24 @@ describe('prompt buffer', function() ]]) eq({ 1, 13 }, api.nvim_buf_get_mark(0, ':')) + -- Cursor not moved when not on the prompt line. + feed('user inputk') + screen:expect([[ + new-prompt > user inpu^t | + new-prompt > user input | + {1:~ }|*7 + | + ]]) + set_prompt('<>< ') + screen:expect([[ + new-prompt > user inpu^t | + <>< user input | + {1:~ }|*7 + | + ]]) + -- No crash when setting shorter prompt than curbuf's in other buffer. + feed('izt') command('new | setlocal buftype=prompt') set_prompt('looooooooooooooooooooooooooooooooooooooooooooong > ', '') -- curbuf set_prompt('foo > ')