T08: Tab and F6 pass Ely's focus keys; each kitty flag reshapes only what it names; Cmd is Super; repeats and Command key-ups come from AppKit; IME commits stay UTF-8, as in kitty and Ghostty; key.zig out; the line rule reads every text file
CI / platforms (windows-latest) (push) Failing after 8s
CI / macos (push) Failing after 9m0s
CI / platforms (ubuntu-24.04) (push) Canceled after 0s

This commit is contained in:
ZacharyZhang-NY committed 2026-10-14 14:59:59 -04:00
1 parent 25365a98c8
commit 11d7a30598
14 files changed
+505 -1147

No files matched your search

+63
View File
@@ -10,6 +10,7 @@ fn key(spec: &'static str, text: &'static str) -> Key<'static> {
shift: parts.contains(&"shift"),
ctrl: parts.contains(&"ctrl"),
alt: parts.contains(&"alt"),
platform: parts.contains(&"cmd"),
action: Action::Press,
}
}
@@ -258,3 +259,65 @@ fn kitty_report_all_alternates_and_text() {
};
assert_eq!(kitty(released, everything).as_deref(), Some("\x1b[13;1:3u"));
}
#[test]
fn flags_that_only_add_fields_keep_legacy_keys() {
let alternates = Kitty {
alternates: true,
..Kitty::default()
};
let bytes = |spec, flags, app_cursor| encode(&key(spec, ""), app_cursor, flags);
assert_eq!(bytes("ctrl+c", alternates, false), Some(vec![0x03]));
assert_eq!(bytes("escape", alternates, false), Some(b"\x1b".to_vec()));
assert_eq!(bytes("up", alternates, true), Some(b"\x1bOA".to_vec()));
assert_eq!(bytes("f1", alternates, false), Some(b"\x1bOP".to_vec()));
assert_eq!(
bytes("ctrl+shift+a", alternates, false),
Some(b"\x1b[97:65;6u".to_vec())
);
let events = Kitty {
events: true,
..Kitty::default()
};
let released = |spec| Key {
action: Action::Release,
..key(spec, "")
};
assert_eq!(bytes("ctrl+c", events, false), Some(vec![0x03]));
assert_eq!(
encode(&released("ctrl+c"), false, events),
Some(b"\x1b[99;5:3u".to_vec())
);
assert_eq!(bytes("f1", events, false), Some(b"\x1b[P".to_vec()));
assert_eq!(bytes("escape", events, false), Some(b"\x1b".to_vec()));
assert_eq!(
encode(&released("escape"), false, events),
Some(b"\x1b[27;1:3u".to_vec())
);
}
#[test]
fn super_is_kittys_eighth_bit() {
let events = Kitty {
events: true,
..DISAMBIGUATE
};
assert_eq!(
kitty(key("cmd+ctrl+c", ""), DISAMBIGUATE).as_deref(),
Some("\x1b[99;13u")
);
let released = Key {
action: Action::Release,
..key("cmd+ctrl+c", "")
};
assert_eq!(kitty(released, events).as_deref(), Some("\x1b[99;13:3u"));
assert_eq!(legacy(key("cmd+c", ""), false), None, "Cmd types nothing");
assert_eq!(
legacy(key("cmd+up", ""), false).as_deref(),
Some("\x1b[1;9A")
);
assert_eq!(
legacy(key("cmd+enter", ""), false).as_deref(),
Some("\x1b[27;9;13~")
);
}