1
0
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:
Christian Fillion
2024-10-16 17:28:38 +02:00
committed by Christian Brabandt
parent 991657e87d
commit a2834e17d1
3 changed files with 13 additions and 3 deletions

View File

@@ -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);
} }
} }

View File

@@ -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

View File

@@ -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,
/**/ /**/