Mercurial > vim
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