From fcf4c435af6fe00348506860c1433414d35223a7 Mon Sep 17 00:00:00 2001 From: bfoersterling Date: Sun, 12 Oct 2025 14:26:34 +0000 Subject: [PATCH] patch 9.1.1849: CTRL-F and CTRL-B don't work in more prompt Problem: CTRL-F and CTRL-B don't work in more prompt Solution: Make CTRL-F and CTRL-B scroll by a screen down/up (Bjoern Foersterling) closes: #18545 Signed-off-by: bfoersterling Signed-off-by: Christian Brabandt --- runtime/doc/message.txt | 39 ++++++++++++++++++----------------- runtime/doc/version9.txt | 3 ++- src/message.c | 6 ++++-- src/testdir/test_messages.vim | 28 ++++++++++++++++++------- src/version.c | 2 ++ 5 files changed, 48 insertions(+), 30 deletions(-) diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt index 048f428cbe..1c9de0cbc2 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 Aug 06 +*message.txt* For Vim version 9.1. Last change: 2025 Oct 12 VIM REFERENCE MANUAL by Bram Moolenaar @@ -859,26 +859,27 @@ This message is given when the screen is filled with messages. It is only given when the 'more' option is on. It is highlighted with the |hl-MoreMsg| group. -Type effect ~ - or or j or one more line - d down a page (half a screen) - or f or down a screen - G down all the way, until the hit-enter - prompt +Type effect ~ + or or j or one more line + d down a page (half a screen) + or f or or CTRL-F down a screen + G down all the way, until the + hit-enter prompt - or k or one line back - u up a page (half a screen) - b or back a screen - g back to the start + or k or one line back + u up a page (half a screen) + b or or CTRL-B back a screen + g back to the start - q, or CTRL-C stop the listing - : stop the listing and enter a - command-line - yank (copy) a modeless selection to - the clipboard ("* and "+ registers) - {menu-entry} what the menu is defined to in - Cmdline-mode. - next page (*) + q, or CTRL-C stop the listing + : stop the listing and enter a + command-line + yank (copy) a modeless + selection to the clipboard + ("* and "+ registers) + {menu-entry} what the menu is defined to + in Cmdline-mode. + next page (*) Any other key causes the meaning of the keys to be displayed. diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt index 0a662f7ccd..90cd5c4c72 100644 --- a/runtime/doc/version9.txt +++ b/runtime/doc/version9.txt @@ -1,4 +1,4 @@ -*version9.txt* For Vim version 9.1. Last change: 2025 Oct 07 +*version9.txt* For Vim version 9.1. Last change: 2025 Oct 12 VIM REFERENCE MANUAL by Bram Moolenaar @@ -41780,6 +41780,7 @@ Others: ~ Command-line. - |min()|/|max()| can handle all comparable data types. - Vim triggers the |TermResponseAll| autocommand for any terminal OSC value. +- Support CTRL-B and CTRL-F in the |more-prompt|. *added-9.2* Added ~ diff --git a/src/message.c b/src/message.c index 5ec5c59a99..d4ebc8e68f 100644 --- a/src/message.c +++ b/src/message.c @@ -1356,7 +1356,7 @@ wait_return(int redraw) */ if (p_more && !p_cp) { - if (c == 'b' || c == 'k' || c == 'u' || c == 'g' + if (c == 'b' || c == Ctrl_B || c == 'k' || c == 'u' || c == 'g' || c == K_UP || c == K_PAGEUP) { if (msg_scrolled > Rows) @@ -1385,7 +1385,7 @@ wait_return(int redraw) } } else if (msg_scrolled > Rows - 2 - && (c == 'j' || c == 'd' || c == 'f' + && (c == 'j' || c == 'd' || c == 'f' || c == Ctrl_F || c == K_DOWN || c == K_PAGEDOWN)) c = K_IGNORE; } @@ -3318,12 +3318,14 @@ do_more_prompt(int typed_char) break; case 'b': // one page back + case Ctrl_B: case K_PAGEUP: toscroll = -(Rows - 1); break; case ' ': // one extra page case 'f': + case Ctrl_F: case K_PAGEDOWN: case K_LEFTMOUSE: toscroll = Rows - 1; diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim index 61193dfd3d..b1dfa7075a 100644 --- a/src/testdir/test_messages.vim +++ b/src/testdir/test_messages.vim @@ -232,18 +232,20 @@ func Test_message_more() call term_sendkeys(buf, "\") call WaitForAssert({-> assert_equal(' 9 9', term_getline(buf, 5))}) - " Down a screen with , f, or . + " Down a screen with , f, or . call term_sendkeys(buf, 'f') call WaitForAssert({-> assert_equal(' 14 14', term_getline(buf, 5))}) call WaitForAssert({-> assert_equal('-- More --', term_getline(buf, 6))}) - call term_sendkeys(buf, ' ') + call term_sendkeys(buf, "\") call WaitForAssert({-> assert_equal(' 19 19', term_getline(buf, 5))}) - call term_sendkeys(buf, "\") + call term_sendkeys(buf, ' ') call WaitForAssert({-> assert_equal(' 24 24', term_getline(buf, 5))}) + call term_sendkeys(buf, "\") + call WaitForAssert({-> assert_equal(' 29 29', term_getline(buf, 5))}) " Down a page (half a screen) with d. call term_sendkeys(buf, 'd') - call WaitForAssert({-> assert_equal(' 27 27', term_getline(buf, 5))}) + call WaitForAssert({-> assert_equal(' 32 32', term_getline(buf, 5))}) " Down all the way with 'G'. call term_sendkeys(buf, 'G') @@ -258,15 +260,17 @@ func Test_message_more() call term_sendkeys(buf, "\") call WaitForAssert({-> assert_equal(' 97 97', term_getline(buf, 5))}) - " Up a screen with b or . + " Up a screen with b, or . call term_sendkeys(buf, 'b') call WaitForAssert({-> assert_equal(' 92 92', term_getline(buf, 5))}) - call term_sendkeys(buf, "\") + call term_sendkeys(buf, "\") call WaitForAssert({-> assert_equal(' 87 87', term_getline(buf, 5))}) + call term_sendkeys(buf, "\") + call WaitForAssert({-> assert_equal(' 82 82', term_getline(buf, 5))}) " Up a page (half a screen) with u. call term_sendkeys(buf, 'u') - call WaitForAssert({-> assert_equal(' 84 84', term_getline(buf, 5))}) + call WaitForAssert({-> assert_equal(' 79 79', term_getline(buf, 5))}) " Up all the way with 'g'. call term_sendkeys(buf, 'g') @@ -274,13 +278,16 @@ func Test_message_more() call WaitForAssert({-> assert_equal(':%p#', term_getline(buf, 1))}) call WaitForAssert({-> assert_equal('-- More --', term_getline(buf, 6))}) - " All the way down. Pressing f should do nothing but pressing + " All the way down. Pressing f or Ctrl-F should do nothing but pressing " space should end the more prompt. call term_sendkeys(buf, 'G') call WaitForAssert({-> assert_equal('100 100', term_getline(buf, 5))}) call WaitForAssert({-> assert_equal('Press ENTER or type command to continue', term_getline(buf, 6))}) call term_sendkeys(buf, 'f') call WaitForAssert({-> assert_equal('100 100', term_getline(buf, 5))}) + call term_sendkeys(buf, "\") + call WaitForAssert({-> assert_equal('100 100', term_getline(buf, 5))}) + call WaitForAssert({-> assert_equal('Press ENTER or type command to continue', term_getline(buf, 6))}) call term_sendkeys(buf, ' ') call WaitForAssert({-> assert_equal('100', term_getline(buf, 5))}) @@ -339,6 +346,11 @@ func Test_message_more_scrollback() call term_sendkeys(buf, 'b') call VerifyScreenDump(buf, 'Test_more_scrollback_2', {}) + call term_sendkeys(buf, "\") + call TermWait(buf) + call term_sendkeys(buf, "\") + call VerifyScreenDump(buf, 'Test_more_scrollback_2', {}) + call term_sendkeys(buf, 'q') call TermWait(buf) call StopVimInTerminal(buf) diff --git a/src/version.c b/src/version.c index a2f10f9114..c28ce040a6 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 */ +/**/ + 1849, /**/ 1848, /**/