changeset 33079:5f201b734cb7 v9.0.1826

patch 9.0.1826: keytrans() doesn't translate recorded key typed in a GUI Commit: https://github.com/vim/vim/commit/1bed993c01c4b5e4c6ab55e80e2410ba87de487c Author: zeertzjq <zeertzjq@outlook.com> Date: Wed Aug 30 19:38:24 2023 +0200 patch 9.0.1826: keytrans() doesn't translate recorded key typed in a GUI 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>
author Christian Brabandt <cb@256bit.org>
date Wed, 30 Aug 2023 19:45:03 +0200
parents be72951df2eb
children 51b4577d57bf
files src/message.c src/testdir/test_gui.vim src/version.c
diffstat 3 files changed, 17 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/message.c
+++ b/src/message.c
@@ -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;
--- a/src/testdir/test_gui.vim
+++ b/src/testdir/test_gui.vim
@@ -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
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1826,
+/**/
     1825,
 /**/
     1824,