patch 9.1.1965: q can accidentally start recording at more prompt

Problem:  When exiting at the end of the more prompt (at the hit enter
          prompt) by hitting q the recording mode will be started.
          (Jakub Łuczyński)
Solution: Don't add the q key to the typeahead buffer
          in the function wait_return (Bjoern Foersterling)

fixes: #2589
closes: #18889

Signed-off-by: Bjoern Foersterling <bjoern.foersterling@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Bjoern Foersterling
2025-12-09 13:27:00 +01:00
committed by Christian Brabandt
parent e72eacceab
commit ecce3497fa
4 changed files with 26 additions and 2 deletions

View File

@ -1,4 +1,4 @@
*message.txt* For Vim version 9.1. Last change: 2025 Nov 09 *message.txt* For Vim version 9.1. Last change: 2025 Dec 09
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -848,6 +848,8 @@ and the screen is about to be redrawn:
like pressing <Space>. This makes it impossible to select text though. like pressing <Space>. This makes it impossible to select text though.
-> For the GUI clicking the left mouse button in the last line works like -> For the GUI clicking the left mouse button in the last line works like
pressing <Space>. pressing <Space>.
-> |q| won't start recording into a register (rationale: it is often used as
"quit" prompt key by users)
If you accidentally hit <Enter> or <Space> and you want to see the displayed If you accidentally hit <Enter> or <Space> and you want to see the displayed
text then use |g<|. This only works when 'more' is set. text then use |g<|. This only works when 'more' is set.

View File

@ -1414,7 +1414,8 @@ wait_return(int redraw)
if (c == K_LEFTMOUSE || c == K_MIDDLEMOUSE || c == K_RIGHTMOUSE if (c == K_LEFTMOUSE || c == K_MIDDLEMOUSE || c == K_RIGHTMOUSE
|| c == K_X1MOUSE || c == K_X2MOUSE) || c == K_X1MOUSE || c == K_X2MOUSE)
(void)jump_to_mouse(MOUSE_SETPOS, NULL, 0); (void)jump_to_mouse(MOUSE_SETPOS, NULL, 0);
else if (vim_strchr((char_u *)"\r\n ", c) == NULL && c != Ctrl_C) else if (vim_strchr((char_u *)"\r\n ", c) == NULL && c != Ctrl_C
&& c != 'q')
{ {
// Put the character back in the typeahead buffer. Don't use // Put the character back in the typeahead buffer. Don't use
// the stuff buffer, because lmaps wouldn't work. // the stuff buffer, because lmaps wouldn't work.

View File

@ -340,6 +340,25 @@ func Test_message_more()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
func Test_message_more_recording()
CheckRunVimInTerminal
let buf = RunVimInTerminal('', {'rows': 6})
call term_sendkeys(buf, ":call setline(1, range(1, 100))\n")
call term_sendkeys(buf, ":%p\n")
call WaitForAssert({-> assert_equal('-- More --', term_getline(buf, 6))})
call term_sendkeys(buf, 'G')
call WaitForAssert({-> assert_equal('Press ENTER or type command to continue', term_getline(buf, 6))})
" Hitting 'q' at the end of the more prompt should not start recording
call term_sendkeys(buf, 'q')
call WaitForAssert({-> assert_equal(5, term_getcursor(buf)[0])})
" Hitting 'k' now should move the cursor up instead of recording keys
call term_sendkeys(buf, 'k')
call WaitForAssert({-> assert_equal(4, term_getcursor(buf)[0])})
call StopVimInTerminal(buf)
endfunc
" Test more-prompt scrollback " Test more-prompt scrollback
func Test_message_more_scrollback() func Test_message_more_scrollback()
CheckScreendump CheckScreendump

View File

@ -729,6 +729,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1965,
/**/ /**/
1964, 1964,
/**/ /**/