mirror of
https://github.com/neovim/neovim.git
synced 2025-10-01 07:28:34 +00:00
fix(prompt): cursor on prompt line, disallow ":edit" #34736
* fix: ensure :edit can not be use on prompt buffer * fix: starting editing on prompt-line doesn't put cursor at the end
This commit is contained in:
@@ -1532,7 +1532,10 @@ static void init_prompt(int cmdchar_todo)
|
|||||||
{
|
{
|
||||||
char *prompt = prompt_text();
|
char *prompt = prompt_text();
|
||||||
|
|
||||||
if (curwin->w_cursor.lnum < curbuf->b_prompt_start.mark.lnum) {
|
if (curwin->w_cursor.lnum < curbuf->b_prompt_start.mark.lnum
|
||||||
|
|| (cmdchar_todo != 'O'
|
||||||
|
&& curwin->w_cursor.lnum == curbuf->b_prompt_start.mark.lnum
|
||||||
|
&& (curwin->w_cursor.col < (int)strlen(prompt_text())))) {
|
||||||
curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
|
curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
|
||||||
coladvance(curwin, MAXCOL);
|
coladvance(curwin, MAXCOL);
|
||||||
}
|
}
|
||||||
|
@@ -5718,6 +5718,12 @@ static void ex_edit(exarg_T *eap)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// prevent use of :edit on prompt-buffers
|
||||||
|
if (bt_prompt(curbuf) && eap->cmdidx == CMD_edit && *eap->arg == NUL) {
|
||||||
|
emsg("cannot :edit a prompt buffer");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
do_exedit(eap, NULL);
|
do_exedit(eap, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -130,6 +130,10 @@ describe('prompt buffer', function()
|
|||||||
{1:~ }|*3
|
{1:~ }|*3
|
||||||
{5:-- INSERT --} |
|
{5:-- INSERT --} |
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
-- :edit doesn't apply on prompt buffer
|
||||||
|
eq('Vim(edit):cannot :edit a prompt buffer', t.pcall_err(api.nvim_command, 'edit'))
|
||||||
|
|
||||||
feed('<C-U>exit\n')
|
feed('<C-U>exit\n')
|
||||||
screen:expect([[
|
screen:expect([[
|
||||||
^other buffer |
|
^other buffer |
|
||||||
@@ -297,6 +301,47 @@ describe('prompt buffer', function()
|
|||||||
{1:~ }|*6
|
{1:~ }|*6
|
||||||
{5:-- INSERT --} |
|
{5:-- INSERT --} |
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
-- ensure cursor gets adjusted to end of user-text to prompt when insert mode
|
||||||
|
-- is entered from readonly region of prompt buffer
|
||||||
|
local prompt_pos = api.nvim_buf_get_mark(0, ':')
|
||||||
|
feed('<esc>')
|
||||||
|
-- works before prompt
|
||||||
|
api.nvim_win_set_cursor(0, { prompt_pos[1] - 1, 0 })
|
||||||
|
screen:expect([[
|
||||||
|
^other buffer |
|
||||||
|
% line1 |
|
||||||
|
line2 |
|
||||||
|
{1:~ }|*6
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
feed('a')
|
||||||
|
feed('<esc>')
|
||||||
|
screen:expect([[
|
||||||
|
other buffer |
|
||||||
|
% line1 |
|
||||||
|
line^2 |
|
||||||
|
{1:~ }|*6
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
-- works on prompt
|
||||||
|
api.nvim_win_set_cursor(0, { prompt_pos[1], 0 })
|
||||||
|
screen:expect([[
|
||||||
|
other buffer |
|
||||||
|
^% line1 |
|
||||||
|
line2 |
|
||||||
|
{1:~ }|*6
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
feed('a')
|
||||||
|
feed('<esc>')
|
||||||
|
screen:expect([[
|
||||||
|
other buffer |
|
||||||
|
% line1 |
|
||||||
|
line^2 |
|
||||||
|
{1:~ }|*6
|
||||||
|
|
|
||||||
|
]])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('can put (p) multiline text', function()
|
it('can put (p) multiline text', function()
|
||||||
|
@@ -859,7 +859,7 @@ func Test_BufReadCmdNofile()
|
|||||||
\ 'quickfix',
|
\ 'quickfix',
|
||||||
\ 'help',
|
\ 'help',
|
||||||
"\ 'terminal',
|
"\ 'terminal',
|
||||||
\ 'prompt',
|
"\ 'prompt',
|
||||||
"\ 'popup',
|
"\ 'popup',
|
||||||
\ ]
|
\ ]
|
||||||
new somefile
|
new somefile
|
||||||
@@ -977,7 +977,7 @@ func Test_BufEnter()
|
|||||||
\ 'quickfix',
|
\ 'quickfix',
|
||||||
\ 'help',
|
\ 'help',
|
||||||
"\ 'terminal',
|
"\ 'terminal',
|
||||||
\ 'prompt',
|
"\ 'prompt',
|
||||||
"\ 'popup',
|
"\ 'popup',
|
||||||
\ ]
|
\ ]
|
||||||
new somefile
|
new somefile
|
||||||
|
Reference in New Issue
Block a user