summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-08-30 19:38:24 +0200
committerChristian Brabandt <cb@256bit.org>2023-08-30 19:38:24 +0200
commit1bed993c01c4b5e4c6ab55e80e2410ba87de487c (patch)
treef32fa1a7dfca5afe48539732be137ede686576d8
parent6e55e85f92aff43c1b3cb564201440f3552d63f0 (diff)
patch 9.0.1826: keytrans() doesn't translate recorded key typed in a GUIv9.0.1826
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>
-rw-r--r--src/message.c12
-rw-r--r--src/testdir/test_gui.vim5
-rw-r--r--src/version.c2
3 files changed, 17 insertions, 2 deletions
diff --git a/src/message.c b/src/message.c
index a258e788b5..98a362411e 100644
--- 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;
diff --git a/src/testdir/test_gui.vim b/src/testdir/test_gui.vim
index 1cf2b0f475..acc72f8395 100644
--- 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
diff --git a/src/version.c b/src/version.c
index 593b7d5f2f..2cad2b43b6 100644
--- 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,