From 0a08d7eb5e5049dee8804dffcb110d7d27503810 Mon Sep 17 00:00:00 2001 From: Linden Krouse Date: Wed, 1 May 2024 13:48:08 -0700 Subject: Add unbind-default-keys config option ref: https://github.com/helix-editor/helix/issues/2720 ref: https://github.com/helix-editor/helix/pull/2733 --- helix-term/src/config.rs | 12 ++++++++++-- helix-term/src/keymap.rs | 7 +++++-- 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'helix-term') diff --git a/helix-term/src/config.rs b/helix-term/src/config.rs index bcba8d8e..ace10821 100644 --- a/helix-term/src/config.rs +++ b/helix-term/src/config.rs @@ -20,6 +20,8 @@ pub struct Config { #[serde(deny_unknown_fields)] pub struct ConfigRaw { pub theme: Option, + #[serde(default)] + pub unbind_default_keys: bool, pub keys: Option>, pub editor: Option, } @@ -66,7 +68,10 @@ impl Config { local.and_then(|file| toml::from_str(&file).map_err(ConfigLoadError::BadConfig)); let res = match (global_config, local_config) { (Ok(global), Ok(local)) => { - let mut keys = keymap::default(); + let mut keys = match local.unbind_default_keys { + true => HashMap::default(), + false => keymap::default(), + }; if let Some(global_keys) = global.keys { merge_keys(&mut keys, global_keys) } @@ -96,7 +101,10 @@ impl Config { return Err(ConfigLoadError::BadConfig(err)) } (Ok(config), Err(_)) | (Err(_), Ok(config)) => { - let mut keys = keymap::default(); + let mut keys = match config.unbind_default_keys { + true => HashMap::default(), + false => keymap::default(), + }; if let Some(keymap) = config.keys { merge_keys(&mut keys, keymap); } diff --git a/helix-term/src/keymap.rs b/helix-term/src/keymap.rs index 975274ed..995e3c41 100644 --- a/helix-term/src/keymap.rs +++ b/helix-term/src/keymap.rs @@ -318,7 +318,10 @@ impl Keymaps { pub fn get(&mut self, mode: Mode, key: KeyEvent) -> KeymapResult { // TODO: remove the sticky part and look up manually let keymaps = &*self.map(); - let keymap = &keymaps[&mode]; + let keymap = match keymaps.get(&mode) { + Some(keymap) => keymap, + None => return KeymapResult::NotFound, + }; if key!(Esc) == key { if !self.state.is_empty() { @@ -373,7 +376,7 @@ impl Default for Keymaps { } } -/// Merge default config keys with user overwritten keys for custom user config. +/// Merge existing config keys with user overwritten keys. pub fn merge_keys(dst: &mut HashMap, mut delta: HashMap) { for (mode, keys) in dst { keys.merge_nodes( -- cgit v1.2.3-70-g09d2