mirror of
https://github.com/nushell/nushell.git
synced 2024-11-22 00:13:21 +01:00
Support kitty key modifiers in keybindings (#13906)
# Description hi hi, this makes the parsing of modifier key combos in config more general, and adds support for additional kitty keyboard protocol modifiers. It seems that support for [kitty keys](https://sw.kovidgoyal.net/kitty/keyboard-protocol) had already been added to nushell in https://github.com/nushell/nushell/pull/10540, and this was the only missing piece to making them available in keybindings. # User-Facing Changes - keybindings in config can include the super, hyper and meta modifiers (e.g. `modifier: super`, `modifier: shift_super`, etc.), and these modifiers will work in supporting terminals (kitty, foot, wezterm, alacritty...) - all permutations of snake_cased modifier combinations now behave equivalently for the purpose of describing keybindings in config (e.g. `control_alt_shift` was previously supported where `shift_control_alt` was a config error — now they're the same) # Tests None of this looks to be tested at the moment. I only found a smoke test under the nu-cli crate, and I couldn't break tests elsewhere by stuffing around with modifier handling. Works on my machine, though! ✨🌈
This commit is contained in:
parent
a948ec6c2c
commit
151767a5e3
@ -761,28 +761,29 @@ fn add_parsed_keybinding(
|
|||||||
keybinding: &ParsedKeybinding,
|
keybinding: &ParsedKeybinding,
|
||||||
config: &Config,
|
config: &Config,
|
||||||
) -> Result<(), ShellError> {
|
) -> Result<(), ShellError> {
|
||||||
let modifier = match keybinding
|
let modifier_string = keybinding
|
||||||
.modifier
|
.modifier
|
||||||
.to_expanded_string("", config)
|
.to_expanded_string("", config)
|
||||||
.to_ascii_lowercase()
|
.to_ascii_lowercase();
|
||||||
.as_str()
|
|
||||||
{
|
let mut modifier = KeyModifiers::NONE;
|
||||||
"control" => KeyModifiers::CONTROL,
|
if modifier_string != "none" {
|
||||||
"shift" => KeyModifiers::SHIFT,
|
for part in modifier_string.split('_') {
|
||||||
"alt" => KeyModifiers::ALT,
|
match part {
|
||||||
"none" => KeyModifiers::NONE,
|
"control" => modifier |= KeyModifiers::CONTROL,
|
||||||
"shift_alt" | "alt_shift" => KeyModifiers::SHIFT | KeyModifiers::ALT,
|
"shift" => modifier |= KeyModifiers::SHIFT,
|
||||||
"control_shift" | "shift_control" => KeyModifiers::CONTROL | KeyModifiers::SHIFT,
|
"alt" => modifier |= KeyModifiers::ALT,
|
||||||
"control_alt" | "alt_control" => KeyModifiers::CONTROL | KeyModifiers::ALT,
|
"super" => modifier |= KeyModifiers::SUPER,
|
||||||
"control_alt_shift" | "control_shift_alt" => {
|
"hyper" => modifier |= KeyModifiers::HYPER,
|
||||||
KeyModifiers::CONTROL | KeyModifiers::ALT | KeyModifiers::SHIFT
|
"meta" => modifier |= KeyModifiers::META,
|
||||||
}
|
_ => {
|
||||||
_ => {
|
return Err(ShellError::UnsupportedConfigValue {
|
||||||
return Err(ShellError::UnsupportedConfigValue {
|
expected: "CONTROL, SHIFT, ALT, SUPER, HYPER, META or NONE".to_string(),
|
||||||
expected: "CONTROL, SHIFT, ALT or NONE".to_string(),
|
value: keybinding.modifier.to_abbreviated_string(config),
|
||||||
value: keybinding.modifier.to_abbreviated_string(config),
|
span: keybinding.modifier.span(),
|
||||||
span: keybinding.modifier.span(),
|
})
|
||||||
})
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user