patch 9.1.1965: q can accidentally start recording at more prompt
Commit:
https://github.com/vim/vim/commit/ecce3497fa9e1a7452ccfa8ba9cbdadb92bfb7fb
Author: Bjoern Foersterling <
bjoern.fo...@gmail.com>
Date: Tue Dec 9 13:27:00 2025 +0100
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.fo...@gmail.com>
Signed-off-by: Christian Brabandt <
c...@256bit.org>
diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt
index 2411440f4..cbbd3f4c3 100644
--- a/runtime/doc/message.txt
+++ b/runtime/doc/message.txt
@@ -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
@@ -848,6 +848,8 @@ and the screen is about to be redrawn:
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
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
text then use |g<|. This only works when 'more' is set.
diff --git a/src/message.c b/src/message.c
index b66762553..4b93b248a 100644
--- a/src/message.c
+++ b/src/message.c
@@ -1414,7 +1414,8 @@ wait_return(int redraw)
if (c == K_LEFTMOUSE || c == K_MIDDLEMOUSE || c == K_RIGHTMOUSE
|| c == K_X1MOUSE || c == K_X2MOUSE)
(void)jump_to_mouse(MOUSE_SETPOS, NULL, 0);
- else if (vim_strchr((char_u *)"
", c) == NULL && c != Ctrl_C)
+ else if (vim_strchr((char_u *)"
", c) == NULL && c != Ctrl_C
+ && c != 'q')
{
// Put the character back in the typeahead buffer. Don't use
// the stuff buffer, because lmaps wouldn't work.
diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim
index 2dca0e36d..8fddcbc43 100644
--- a/src/testdir/test_messages.vim
+++ b/src/testdir/test_messages.vim
@@ -340,6 +340,25 @@ func Test_message_more()
call StopVimInTerminal(buf)
endfunc
+func Test_message_more_recording()
+ CheckRunVimInTerminal
+ let buf = RunVimInTerminal('', {'rows': 6})
+ call term_sendkeys(buf, ":call setline(1, range(1, 100))
")
+ call term_sendkeys(buf, ":%p
")
+ 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
func Test_message_more_scrollback()
CheckScreendump
diff --git a/src/version.c b/src/version.c
index fef7febbb..beda34d85 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1965,
/**/
1964,
/**/