@@ -269,41 +269,11 @@ pub enum KeymapResult {
269 Cancelled(Vec<KeyEvent>),
269 Cancelled(Vec<KeyEvent>),
272−#[derive(Debug, Clone, PartialEq, Deserialize)]
273−#[serde(transparent)]
274−pub struct Keymap(KeyTrie);
276/// A map of command names to keybinds that will execute the command.
272/// A map of command names to keybinds that will execute the command.
277pub type ReverseKeymap = HashMap<String, Vec<Vec<KeyEvent>>>;
273pub type ReverseKeymap = HashMap<String, Vec<Vec<KeyEvent>>>;
280− pub fn new(root: KeyTrie) -> Self {
285−impl Deref for Keymap {
286− type Target = KeyTrie;
288− fn deref(&self) -> &Self::Target {
293−impl DerefMut for Keymap {
294− fn deref_mut(&mut self) -> &mut Self::Target {
299−impl Default for Keymap {
300− fn default() -> Self {
301− Self(KeyTrie::Node(KeyTrieNode::default()))
305pub struct Keymaps {
275pub struct Keymaps {
306− pub map: Box<dyn DynAccess<HashMap<Mode, Keymap>>>,
276+ pub map: Box<dyn DynAccess<HashMap<Mode, KeyTrie>>>,
307 /// Stores pending keys waiting for the next key. This is relative to a
277 /// Stores pending keys waiting for the next key. This is relative to a
308 /// sticky node if one is in use.
278 /// sticky node if one is in use.
309 state: Vec<KeyEvent>,
279 state: Vec<KeyEvent>,
@@ -312,7 +282,7 @@ pub struct Keymaps {
314impl Keymaps {
284impl Keymaps {
315− pub fn new(map: Box<dyn DynAccess<HashMap<Mode, Keymap>>>) -> Self {
285+ pub fn new(map: Box<dyn DynAccess<HashMap<Mode, KeyTrie>>>) -> Self {
318 state: Vec::new(),
288 state: Vec::new(),
@@ -320,7 +290,7 @@ impl Keymaps {
323− pub fn map(&self) -> DynGuard<HashMap<Mode, Keymap>> {
293+ pub fn map(&self) -> DynGuard<HashMap<Mode, KeyTrie>> {
324 self.map.load()
294 self.map.load()
@@ -352,7 +322,7 @@ impl Keymaps {
352 let first = self.state.get(0).unwrap_or(&key);
322 let first = self.state.get(0).unwrap_or(&key);
353 let trie_node = match self.sticky {
323 let trie_node = match self.sticky {
354 Some(ref trie) => Cow::Owned(KeyTrie::Node(trie.clone())),
324 Some(ref trie) => Cow::Owned(KeyTrie::Node(trie.clone())),
355− None => Cow::Borrowed(&keymap.0),
325+ None => Cow::Borrowed(keymap),
358 let trie = match trie_node.search(&[*first]) {
328 let trie = match trie_node.search(&[*first]) {
@@ -395,9 +365,13 @@ impl Default for Keymaps {
397/// Merge default config keys with user overwritten keys for custom user config.
367/// Merge default config keys with user overwritten keys for custom user config.
398−pub fn merge_keys(dst: &mut HashMap<Mode, Keymap>, mut delta: HashMap<Mode, Keymap>) {
368+pub fn merge_keys(dst: &mut HashMap<Mode, KeyTrie>, mut delta: HashMap<Mode, KeyTrie>) {
399 for (mode, keys) in dst {
369 for (mode, keys) in dst {
400− keys.merge_nodes(delta.remove(mode).unwrap_or_default().0)
370+ keys.merge_nodes(
373+ .unwrap_or_else(|| KeyTrie::Node(KeyTrieNode::default())),
@@ -426,8 +400,7 @@ mod tests {
427 fn merge_partial_keys() {
401 fn merge_partial_keys() {
428 let keymap = hashmap! {
402 let keymap = hashmap! {
429− Mode::Normal => Keymap::new(
430− keymap!({ "Normal mode"
403+ Mode::Normal => keymap!({ "Normal mode"
431 "i" => normal_mode,
404 "i" => normal_mode,
432 "无" => insert_mode,
405 "无" => insert_mode,
433 "z" => jump_backward,
406 "z" => jump_backward,
@@ -436,7 +409,6 @@ mod tests {
436 "g" => delete_char_forward,
409 "g" => delete_char_forward,
441 let mut merged_keyamp = default();
413 let mut merged_keyamp = default();
442 merge_keys(&mut merged_keyamp, keymap.clone());
414 merge_keys(&mut merged_keyamp, keymap.clone());
@@ -501,8 +473,7 @@ mod tests {
502 fn order_should_be_set() {
474 fn order_should_be_set() {
503 let keymap = hashmap! {
475 let keymap = hashmap! {
504− Mode::Normal => Keymap::new(
505− keymap!({ "Normal mode"
476+ Mode::Normal => keymap!({ "Normal mode"
506 "space" => { ""
477 "space" => { ""
507 "s" => { ""
478 "s" => { ""
508 "v" => vsplit,
479 "v" => vsplit,
@@ -510,7 +481,6 @@ mod tests {
515 let mut merged_keyamp = default();
485 let mut merged_keyamp = default();
516 merge_keys(&mut merged_keyamp, keymap.clone());
486 merge_keys(&mut merged_keyamp, keymap.clone());
@@ -553,7 +523,7 @@ mod tests {
554 "j" | "k" => move_line_down,
524 "j" | "k" => move_line_down,
556− let keymap = Keymap::new(normal_mode);
526+ let keymap = normal_mode;
557 let mut reverse_map = keymap.reverse_map();
527 let mut reverse_map = keymap.reverse_map();
559 // sort keybindings in order to have consistent tests
529 // sort keybindings in order to have consistent tests
@@ -601,7 +571,7 @@ mod tests {
601 modifiers: KeyModifiers::NONE,
571 modifiers: KeyModifiers::NONE,
604− let expectation = Keymap::new(KeyTrie::Node(KeyTrieNode::new(
574+ let expectation = KeyTrie::Node(KeyTrieNode::new(
606 hashmap! {
576 hashmap! {
607 key => KeyTrie::Sequence(vec!{
577 key => KeyTrie::Sequence(vec!{
@@ -618,7 +588,7 @@ mod tests {
620 vec![key],
590 vec![key],
623 assert_eq!(toml::from_str(keys), Ok(expectation));
593 assert_eq!(toml::from_str(keys), Ok(expectation));