This commit is contained in:
@@ -1484,7 +1484,11 @@ fn terminal_key_from_parts(
|
|||||||
"delete" => TerminalKey::Delete,
|
"delete" => TerminalKey::Delete,
|
||||||
"pageup" => TerminalKey::PageUp,
|
"pageup" => TerminalKey::PageUp,
|
||||||
"pagedown" => TerminalKey::PageDown,
|
"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::<u8>().ok()?;
|
let number = function.strip_prefix('f')?.parse::<u8>().ok()?;
|
||||||
TerminalKey::Function(number)
|
TerminalKey::Function(number)
|
||||||
}
|
}
|
||||||
@@ -1557,6 +1561,12 @@ mod tests {
|
|||||||
let enter = terminal_key_from_parts("enter", None, KeyModifiers::default()).unwrap();
|
let enter = terminal_key_from_parts("enter", None, KeyModifiers::default()).unwrap();
|
||||||
assert_eq!(enter.key, TerminalKey::Enter);
|
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();
|
let composed = terminal_key_from_parts("é", Some("é"), KeyModifiers::default()).unwrap();
|
||||||
assert_eq!(composed.key, TerminalKey::Text("é".into()));
|
assert_eq!(composed.key, TerminalKey::Text("é".into()));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user