aboutsummaryrefslogtreecommitdiff
path: root/src/input
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-04-13 17:34:13 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-04-13 17:34:13 +0300
commit305d9577043291af271d16bdd2208f748e5949ba (patch)
tree743a6bf9cb241b852168fa58c69dfb2848c295b5 /src/input
parent99c8468d7fa45454616b75c79c017985397a2d6c (diff)
fix input encoding for ctrl+letter in kitty mode
Diffstat (limited to 'src/input')
-rw-r--r--src/input/encode.rs9
-rw-r--r--src/input/tests.rs14
2 files changed, 11 insertions, 12 deletions
diff --git a/src/input/encode.rs b/src/input/encode.rs
index 1311d4a0..6599b3ba 100644
--- a/src/input/encode.rs
+++ b/src/input/encode.rs
@@ -151,15 +151,6 @@ fn try_encode_csi_u(key: &TerminalKey, flags: u16) -> Option<Vec<u8>> {
return None;
}
- // Plain Ctrl+letter is well-represented in legacy (bytes 1-26)
- if mods == KeyModifiers::CONTROL {
- if let KeyCode::Char(c) = key.code {
- if c.is_ascii_alphabetic() {
- return None; // let legacy handle it
- }
- }
- }
-
// Special keys (arrows, F-keys, etc.) have well-established legacy
// xterm modified formats (\x1b[1;3A for Alt+Up, etc.) that are universally
// understood. Even Ghostty sends these in legacy format with kitty mode on.
diff --git a/src/input/tests.rs b/src/input/tests.rs
index d624d28a..6e196ad7 100644
--- a/src/input/tests.rs
+++ b/src/input/tests.rs
@@ -295,12 +295,20 @@ fn kitty_alt_enter() {
}
#[test]
-fn kitty_plain_ctrl_c_uses_legacy() {
- // Plain Ctrl+letter is well-represented in legacy
+fn kitty_plain_ctrl_c_uses_csi_u() {
let key = KeyEvent::new(KeyCode::Char('c'), KeyModifiers::CONTROL);
assert_eq!(
encode_key(key, KeyboardProtocol::Kitty { flags: 1 }),
- vec![3]
+ b"\x1b[99;5u"
+ );
+}
+
+#[test]
+fn kitty_plain_ctrl_c_includes_press_event_when_requested() {
+ let key = KeyEvent::new(KeyCode::Char('c'), KeyModifiers::CONTROL);
+ assert_eq!(
+ encode_key(key, KeyboardProtocol::Kitty { flags: 3 }),
+ b"\x1b[99;5:1u"
);
}