fix(keybindings): add support for binding Ctrl-Space (#3101)

* Add support for binding Ctrl-@

On most terminals, typing Ctrl-@ results in a null character with no
modifier.

Moreover, Ctrl-Space is commonly mapped as an alias for Ctrl-@, making
it easier to bind it as well.

* style(fmt): rustfmt

---------

Co-authored-by: Aram Drevekenin <aram@poor.dev>
This commit is contained in:
Ido Yariv 2024-03-26 07:12:58 -04:00 committed by GitHub
parent 71ac381a21
commit 03e8a9398a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -79,6 +79,9 @@ impl FromStr for Key {
} }
} }
match (modifier, main_key) { match (modifier, main_key) {
(Some("Ctrl"), Some(main_key)) if main_key == "@" || main_key == "Space" => {
Ok(Key::Char('\x00'))
},
(Some("Ctrl"), Some(main_key)) => { (Some("Ctrl"), Some(main_key)) => {
parse_main_key(main_key, key_str, Key::Ctrl, Key::CtrlF) parse_main_key(main_key, key_str, Key::Ctrl, Key::CtrlF)
}, },
@ -171,6 +174,7 @@ impl fmt::Display for Key {
'\n' => write!(f, "ENTER"), '\n' => write!(f, "ENTER"),
'\t' => write!(f, "TAB"), '\t' => write!(f, "TAB"),
' ' => write!(f, "SPACE"), ' ' => write!(f, "SPACE"),
'\x00' => write!(f, "Ctrl+SPACE"),
_ => write!(f, "{}", c), _ => write!(f, "{}", c),
}, },
Key::Alt(c) => write!(f, "Alt+{}", c), Key::Alt(c) => write!(f, "Alt+{}", c),