Mercurial > vim
changeset 36326:707c8b5ab3d8 draft v9.1.0788
patch 9.1.0788: <CSI>27;<mod>u is not decoded to literal Escape in kitty/foot
Commit: https://github.com/vim/vim/commit/a2834e17d18a3e7211da6f792cc6d86dac5e8c3b
Author: Christian Fillion <contact@cfillion.ca>
Date: Wed Oct 16 17:28:38 2024 +0200
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/
- https://codeberg.org/dnkl/foot/src/commit/e891abdd6a6652bd46b28c1988700a7f30931210/kitty-keymap.h
- https://github.com/kovidgoyal/kitty/blob/d31459b0926f2afddc317d76314e4afd0d07d473/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>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 16 Oct 2024 17:45:10 +0200 |
parents | 8ce1695e1950 |
children | 5d91d6c95e6c |
files | src/edit.c src/testdir/test_termcodes.vim src/version.c |
diffstat | 3 files changed, 13 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/edit.c +++ b/src/edit.c @@ -1625,7 +1625,8 @@ decodeModifyOtherKeys(int c) if (typebuf.tb_len >= 4 && (c == CSI || (c == ESC && *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; idx += 3; @@ -1640,9 +1641,10 @@ decodeModifyOtherKeys(int c) break; ++idx; } + int kitty_no_mods = argidx == 0 && kitty_protocol_state == KKPS_ENABLED; if (idx < typebuf.tb_len && p[idx] == (form == 1 ? '~' : 'u') - && argidx == 1) + && (argidx == 1 || kitty_no_mods)) { // Match, consume the code. typebuf.tb_off += idx + 1; @@ -1652,7 +1654,7 @@ decodeModifyOtherKeys(int c) typebuf_was_filled = FALSE; #endif - mod_mask = decode_modifiers(arg[!form]); + mod_mask = kitty_no_mods ? 0 : decode_modifiers(arg[!form]); c = merge_modifyOtherKeys(arg[form], &mod_mask); } }
--- a/src/testdir/test_termcodes.vim +++ b/src/testdir/test_termcodes.vim @@ -2001,6 +2001,12 @@ func Test_xx08_kitty_response() \ kitty: 'y', \ }, 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= call test_override('term_props', 0) endfunc