]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1826: keytrans() doesn't translate recorded key typed in a GUI v9.0.1826
authorzeertzjq <zeertzjq@outlook.com>
Wed, 30 Aug 2023 17:38:24 +0000 (19:38 +0200)
committerChristian Brabandt <cb@256bit.org>
Wed, 30 Aug 2023 17:38:24 +0000 (19:38 +0200)
Problem:  keytrans() doesn't translate recorded key typed in a GUI
Solution: Handle CSI like K_SPECIAL, like in mb_unescape()

closes: #12964
closes: #12966

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

index a258e788b5f36c7aa489e4ac1b775d7c2805a4ce..98a362411ea3752fe36693a7176f8e6535d914e3 100644 (file)
@@ -1842,7 +1842,11 @@ str2special(
     }
 
     c = *str;
-    if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL)
+    if ((c == K_SPECIAL
+#ifdef FEAT_GUI
+               || c == CSI
+#endif
+       ) && str[1] != NUL && str[2] != NUL)
     {
        if (str[1] == KS_MODIFIER)
        {
@@ -1850,7 +1854,11 @@ str2special(
            str += 3;
            c = *str;
        }
-       if (c == K_SPECIAL && str[1] != NUL && str[2] != NUL)
+       if ((c == K_SPECIAL
+#ifdef FEAT_GUI
+                   || c == CSI
+#endif
+           ) && str[1] != NUL && str[2] != NUL)
        {
            c = TO_SPECIAL(str[1], str[2]);
            str += 2;
index 1cf2b0f475fc03c5b33f0b3b5a0abd5697cdc7fc..acc72f8395bd4be1dbec5e6ed71cc78b5d03d904 100644 (file)
@@ -1687,4 +1687,9 @@ func Test_gui_macro_csi()
   iunmap <C-D>t
 endfunc
 
+func Test_gui_csi_keytrans()
+  call assert_equal('<C-L>', keytrans("\x9b\xfc\x04L"))
+  call assert_equal('<C-D>', keytrans("\x9b\xfc\x04D"))
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index 593b7d5f2fe1cff6c744201f8052615b16b4b352..2cad2b43b6a9ae733e170e0dde8a1e0939d3583a 100644 (file)
@@ -699,6 +699,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1826,
 /**/
     1825,
 /**/