]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1853: Ctrl-F and Ctrl-B at more prompt not working with key protocol v9.1.1853
authorzeertzjq <zeertzjq@outlook.com>
Mon, 13 Oct 2025 19:02:10 +0000 (19:02 +0000)
committerChristian Brabandt <cb@256bit.org>
Mon, 13 Oct 2025 19:02:10 +0000 (19:02 +0000)
Problem:  Ctrl-F and Ctrl-B at more prompt not working with kitty
          keyboard protocol or modifyOtherKeys (after v9.1.1849).
Solution: Call merge_modifyOtherKeys() in get_keystroke() (zeertzjq).

closes: #18558

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/misc1.c
src/testdir/test_messages.vim
src/version.c

index 225bb3cc2ab3c0ad3d6faa6b3a0783d0c5d56a8f..8af50fc5a5bb39c76f0dd1509d59710f2c6f63c7 100644 (file)
@@ -871,6 +871,7 @@ get_keystroke(void)
     int                save_mapped_ctrl_c = mapped_ctrl_c;
     int                waited = 0;
 
+    mod_mask = 0;
     mapped_ctrl_c = FALSE;     // mappings are not used here
     for (;;)
     {
@@ -974,7 +975,7 @@ get_keystroke(void)
     vim_free(buf);
 
     mapped_ctrl_c = save_mapped_ctrl_c;
-    return n;
+    return merge_modifyOtherKeys(n, &mod_mask);
 }
 
 // For overflow detection, add a digit safely to an int value.
index b1dfa7075aaf67f16a3ef9fc134155f9ed442b1c..908286c6de7facc4d300c900966a81ed97876a81 100644 (file)
@@ -209,6 +209,7 @@ func Test_message_more()
   CheckRunVimInTerminal
 
   let buf = RunVimInTerminal('', {'rows': 6})
+  let chan = buf->term_getjob()->job_getchannel()
   call term_sendkeys(buf, ":call setline(1, range(1, 100))\n")
 
   call term_sendkeys(buf, ":%pfoo\<C-H>\<C-H>\<C-H>#")
@@ -272,6 +273,19 @@ func Test_message_more()
   call term_sendkeys(buf, 'u')
   call WaitForAssert({-> assert_equal(' 79 79', term_getline(buf, 5))})
 
+  " Test <C-F> and <C-B> with different keyboard protocols.
+  for [ctrl_f, ctrl_b] in [
+        \ [GetEscCodeCSI27('f', 5), GetEscCodeCSI27('b', 5)],
+        \ [GetEscCodeCSI27('F', 5), GetEscCodeCSI27('B', 5)],
+        \ [GetEscCodeCSIu('f', 5), GetEscCodeCSIu('b', 5)],
+        \ [GetEscCodeCSIu('F', 5), GetEscCodeCSIu('B', 5)],
+        \ ]
+    call ch_sendraw(chan, ctrl_f)
+    call WaitForAssert({-> assert_equal(' 84 84', term_getline(buf, 5))})
+    call ch_sendraw(chan, ctrl_b)
+    call WaitForAssert({-> assert_equal(' 79 79', term_getline(buf, 5))})
+  endfor
+
   " Up all the way with 'g'.
   call term_sendkeys(buf, 'g')
   call WaitForAssert({-> assert_equal('  4 4', term_getline(buf, 5))})
@@ -285,6 +299,7 @@ func Test_message_more()
   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 WaitForAssert({-> assert_equal('Press ENTER or type command to continue', term_getline(buf, 6))})
   call term_sendkeys(buf, "\<C-F>")
   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))})
index 95f88fcb849e6d8cbd5939bd570547766045f381..100595d66543bd43ca1890e485cd7e6aa5654f0c 100644 (file)
@@ -729,6 +729,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1853,
 /**/
     1852,
 /**/