0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

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>
This commit is contained in:
zeertzjq 2023-08-30 19:38:24 +02:00 committed by Christian Brabandt
parent 6e55e85f92
commit 1bed993c01
No known key found for this signature in database
GPG Key ID: F3F92DA383FDDE09
3 changed files with 17 additions and 2 deletions

View File

@ -1842,7 +1842,11 @@ str2special(
} }
c = *str; 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) if (str[1] == KS_MODIFIER)
{ {
@ -1850,7 +1854,11 @@ str2special(
str += 3; str += 3;
c = *str; 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]); c = TO_SPECIAL(str[1], str[2]);
str += 2; str += 2;

View File

@ -1687,4 +1687,9 @@ func Test_gui_macro_csi()
iunmap <C-D>t iunmap <C-D>t
endfunc 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 " vim: shiftwidth=2 sts=2 expandtab

View File

@ -699,6 +699,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1826,
/**/ /**/
1825, 1825,
/**/ /**/