From e7ca1d0a7393e37b4cc616a1fab39246aa456a52 Mon Sep 17 00:00:00 2001 From: Kartios Date: Mon, 31 Aug 2026 17:32:37 -0700 Subject: [PATCH] fix: preserve literal f terminal input --- spikes/gpui-shell/src/main.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/spikes/gpui-shell/src/main.rs b/spikes/gpui-shell/src/main.rs index 9dfa0c5..b522cd1 100644 --- a/spikes/gpui-shell/src/main.rs +++ b/spikes/gpui-shell/src/main.rs @@ -1484,7 +1484,11 @@ fn terminal_key_from_parts( "delete" => TerminalKey::Delete, "pageup" => TerminalKey::PageUp, "pagedown" => TerminalKey::PageDown, - function if function.starts_with('f') => { + function + if function.strip_prefix('f').is_some_and(|suffix| { + !suffix.is_empty() && suffix.bytes().all(|byte| byte.is_ascii_digit()) + }) => + { let number = function.strip_prefix('f')?.parse::().ok()?; TerminalKey::Function(number) } @@ -1557,6 +1561,12 @@ mod tests { let enter = terminal_key_from_parts("enter", None, KeyModifiers::default()).unwrap(); assert_eq!(enter.key, TerminalKey::Enter); + let literal_f = terminal_key_from_parts("f", Some("f"), KeyModifiers::default()).unwrap(); + assert_eq!(literal_f.key, TerminalKey::Text("f".into())); + + let function = terminal_key_from_parts("f12", None, KeyModifiers::default()).unwrap(); + assert_eq!(function.key, TerminalKey::Function(12)); + let composed = terminal_key_from_parts("é", Some("é"), KeyModifiers::default()).unwrap(); assert_eq!(composed.key, TerminalKey::Text("é".into())); }