From 6622dc2ded496f9e1484034cd4f53e9ba900026f Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Mon, 13 Oct 2025 19:02:10 +0000 Subject: [PATCH] patch 9.1.1853: Ctrl-F and Ctrl-B at more prompt not working with key protocol 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 Signed-off-by: Christian Brabandt --- src/misc1.c | 3 ++- src/testdir/test_messages.vim | 15 +++++++++++++++ src/version.c | 2 ++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/misc1.c b/src/misc1.c index 225bb3cc2a..8af50fc5a5 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -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. diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim index b1dfa7075a..908286c6de 100644 --- a/src/testdir/test_messages.vim +++ b/src/testdir/test_messages.vim @@ -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\\\#") @@ -272,6 +273,19 @@ func Test_message_more() call term_sendkeys(buf, 'u') call WaitForAssert({-> assert_equal(' 79 79', term_getline(buf, 5))}) + " Test and 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, "\") 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))}) diff --git a/src/version.c b/src/version.c index 95f88fcb84..100595d665 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 */ +/**/ + 1853, /**/ 1852, /**/