forked from aniani/vim
patch 9.1.0788: <CSI>27;<mod>u is not decoded to literal Escape in kitty/foot
Problem: <CSI>27;<mod>u is not decoded to literal Escape in kitty/foot Solution: disable XTerm modifyOtherKeys form 1 when the kitty protocol is enabled (Christian Fillion) References: - https://invisible-island.net/xterm/modified-keys.html - https://sw.kovidgoyal.net/kitty/keyboard-protocol/ -e891abdd6a/kitty-keymap.h
-d31459b092/kitty/key_encoding.c (L193)
fixes: #15868 closes: #15881 Signed-off-by: Christian Fillion <contact@cfillion.ca> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
991657e87d
commit
a2834e17d1
@@ -1625,7 +1625,8 @@ decodeModifyOtherKeys(int c)
|
|||||||
if (typebuf.tb_len >= 4 && (c == CSI || (c == ESC && *p == '[')))
|
if (typebuf.tb_len >= 4 && (c == CSI || (c == ESC && *p == '[')))
|
||||||
{
|
{
|
||||||
idx = (*p == '[');
|
idx = (*p == '[');
|
||||||
if (p[idx] == '2' && p[idx + 1] == '7' && p[idx + 2] == ';')
|
if (p[idx] == '2' && p[idx + 1] == '7' && p[idx + 2] == ';' &&
|
||||||
|
kitty_protocol_state != KKPS_ENABLED)
|
||||||
{
|
{
|
||||||
form = 1;
|
form = 1;
|
||||||
idx += 3;
|
idx += 3;
|
||||||
@@ -1640,9 +1641,10 @@ decodeModifyOtherKeys(int c)
|
|||||||
break;
|
break;
|
||||||
++idx;
|
++idx;
|
||||||
}
|
}
|
||||||
|
int kitty_no_mods = argidx == 0 && kitty_protocol_state == KKPS_ENABLED;
|
||||||
if (idx < typebuf.tb_len
|
if (idx < typebuf.tb_len
|
||||||
&& p[idx] == (form == 1 ? '~' : 'u')
|
&& p[idx] == (form == 1 ? '~' : 'u')
|
||||||
&& argidx == 1)
|
&& (argidx == 1 || kitty_no_mods))
|
||||||
{
|
{
|
||||||
// Match, consume the code.
|
// Match, consume the code.
|
||||||
typebuf.tb_off += idx + 1;
|
typebuf.tb_off += idx + 1;
|
||||||
@@ -1652,7 +1654,7 @@ decodeModifyOtherKeys(int c)
|
|||||||
typebuf_was_filled = FALSE;
|
typebuf_was_filled = FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mod_mask = decode_modifiers(arg[!form]);
|
mod_mask = kitty_no_mods ? 0 : decode_modifiers(arg[!form]);
|
||||||
c = merge_modifyOtherKeys(arg[form], &mod_mask);
|
c = merge_modifyOtherKeys(arg[form], &mod_mask);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2001,6 +2001,12 @@ func Test_xx08_kitty_response()
|
|||||||
\ kitty: 'y',
|
\ kitty: 'y',
|
||||||
\ }, terminalprops())
|
\ }, terminalprops())
|
||||||
|
|
||||||
|
call feedkeys("\<Esc>[?1u") " simulate the kitty keyboard protocol is enabled
|
||||||
|
call feedkeys(':' .. GetEscCodeCSIu('V', '5') .. GetEscCodeCSIuWithoutModifier("\<Esc>") .. "\<C-B>\"\<CR>", 'Lx!')
|
||||||
|
call assert_equal("\"\<Esc>", @:)
|
||||||
|
call feedkeys(':' .. GetEscCodeCSIu('V', '5') .. GetEscCodeCSIu("\<Esc>", '129') .. "\<C-B>\"\<CR>", 'Lx!')
|
||||||
|
call assert_equal("\"\<Esc>", @:)
|
||||||
|
|
||||||
set t_RV=
|
set t_RV=
|
||||||
call test_override('term_props', 0)
|
call test_override('term_props', 0)
|
||||||
endfunc
|
endfunc
|
||||||
|
@@ -704,6 +704,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 */
|
||||||
|
/**/
|
||||||
|
788,
|
||||||
/**/
|
/**/
|
||||||
787,
|
787,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user