From e536bd8bd99de975cb2d15bb384e6e35f88ef88e Mon Sep 17 00:00:00 2001 From: Can Celik Date: Sun, 26 Jul 2026 04:22:05 +0300 Subject: fix: support non-us shifted keybindings (#1876) * fix: support non-us shifted keybindings refs #1870 * docs: require current pull request base --- src/input/parse.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/input') diff --git a/src/input/parse.rs b/src/input/parse.rs index 36de52e8..e4c554f8 100644 --- a/src/input/parse.rs +++ b/src/input/parse.rs @@ -600,6 +600,22 @@ mod tests { assert_eq!(key.shifted_codepoint, Some('L' as u32)); } + #[test] + fn parse_kitty_sequence_preserves_non_us_shift_pairs() { + for (sequence, base, shifted) in [ + ("\x1b[50:34;2:1u", '2', '"'), + ("\x1b[38:49;2:1u", '&', '1'), + ("\x1b[305:73;2:1u", 'ı', 'I'), + ("\x1b[287:286;2:1u", 'ğ', 'Ğ'), + ] { + let key = parse_terminal_key_sequence(sequence).unwrap(); + assert_eq!(key.code, KeyCode::Char(base)); + assert_eq!(key.modifiers, KeyModifiers::SHIFT); + assert_eq!(key.kind, crossterm::event::KeyEventKind::Press); + assert_eq!(key.shifted_codepoint, Some(shifted as u32)); + } + } + #[test] fn parse_kitty_sequence_with_associated_emoji_text() { let key = parse_terminal_key_sequence("\x1b[128512;1;128512u").unwrap(); -- cgit v1.2.3