From a300e54ee8c221d43391474571699ab816885bea Mon Sep 17 00:00:00 2001 From: pagedmov Date: Tue, 3 Mar 2026 03:33:53 -0500 Subject: [PATCH] fixed default leader key ('\') not expanding properly --- src/builtin/keymap.rs | 1 + src/expand.rs | 9 ++++++++- src/readline/mod.rs | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/builtin/keymap.rs b/src/builtin/keymap.rs index 3bb63bb..3d8b8c8 100644 --- a/src/builtin/keymap.rs +++ b/src/builtin/keymap.rs @@ -96,6 +96,7 @@ impl KeyMap { expand_keymap(&self.action) } pub fn compare(&self, other: &[KeyEvent]) -> KeyMapMatch { + log::debug!("Comparing keymap keys {:?} with input {:?}", self.keys_expanded(), other); let ours = self.keys_expanded(); if other == ours { KeyMapMatch::IsExact diff --git a/src/expand.rs b/src/expand.rs index 53fb256..dc875d5 100644 --- a/src/expand.rs +++ b/src/expand.rs @@ -2145,6 +2145,7 @@ pub fn expand_aliases( } pub fn expand_keymap(s: &str) -> Vec { + log::debug!("Expanding keymap for '{}'", s); let mut keys = Vec::new(); let mut chars = s.chars().collect::>(); while let Some(ch) = chars.pop_front() { @@ -2164,8 +2165,13 @@ pub fn expand_keymap(s: &str) -> Vec { } } '>' => { + log::debug!("Found key alias '{}'", alias); if alias.eq_ignore_ascii_case("leader") { - let leader = read_shopts(|o| o.prompt.leader.clone()); + let mut leader = read_shopts(|o| o.prompt.leader.clone()); + if leader == "\\" { + leader.push('\\'); + } + log::debug!("Expanding leader key to '{}'", leader); keys.extend(expand_keymap(&leader)); } else if let Some(key) = parse_key_alias(&alias) { keys.push(key); @@ -2182,6 +2188,7 @@ pub fn expand_keymap(s: &str) -> Vec { } } + log::debug!("Expanded keymap '{}' to {:?}", s, keys); keys } diff --git a/src/readline/mod.rs b/src/readline/mod.rs index 3096b11..7230f26 100644 --- a/src/readline/mod.rs +++ b/src/readline/mod.rs @@ -418,6 +418,7 @@ impl ShedVi { } else if matches.len() == 1 && matches[0].compare(&self.pending_keymap) == KeyMapMatch::IsExact { // We have a single exact match. Execute it. let keymap = matches[0].clone(); + log::debug!("[keymap] self.pending_keymap={:?}", self.pending_keymap); log::debug!("[keymap] exact match: {:?} -> {:?}", keymap.keys, keymap.action); self.pending_keymap.clear(); let action = keymap.action_expanded();