@@ -195,6 +195,32 @@ impl<'de> serde::de::Visitor<'de> for KeyTrieVisitor {
197impl KeyTrie {
197impl KeyTrie {
198+ pub fn reverse_map(&self) -> ReverseKeymap {
199+ // recursively visit all nodes in keymap
200+ fn map_node(cmd_map: &mut ReverseKeymap, node: &KeyTrie, keys: &mut Vec<KeyEvent>) {
202+ KeyTrie::MappableCommand(cmd) => {
203+ let name = cmd.name();
204+ if name != "no_op" {
205+ cmd_map.entry(name.into()).or_default().push(keys.clone())
208+ KeyTrie::Node(next) => {
209+ for (key, trie) in &next.map {
211+ map_node(cmd_map, trie, keys);
215+ KeyTrie::Sequence(_) => {}
219+ let mut res = HashMap::new();
220+ map_node(&mut res, self, &mut Vec::new());
198 pub fn node(&self) -> Option<&KeyTrieNode> {
224 pub fn node(&self) -> Option<&KeyTrieNode> {
199 match *self {
225 match *self {
200 KeyTrie::Node(ref node) => Some(node),
226 KeyTrie::Node(ref node) => Some(node),
@@ -254,32 +280,6 @@ impl Keymap {
254 pub fn new(root: KeyTrie) -> Self {
280 pub fn new(root: KeyTrie) -> Self {
255 Keymap(root)
281 Keymap(root)
258− pub fn reverse_map(&self) -> ReverseKeymap {
259− // recursively visit all nodes in keymap
260− fn map_node(cmd_map: &mut ReverseKeymap, node: &KeyTrie, keys: &mut Vec<KeyEvent>) {
262− KeyTrie::MappableCommand(cmd) => {
263− let name = cmd.name();
264− if name != "no_op" {
265− cmd_map.entry(name.into()).or_default().push(keys.clone())
268− KeyTrie::Node(next) => {
269− for (key, trie) in &next.map {
271− map_node(cmd_map, trie, keys);
275− KeyTrie::Sequence(_) => {}
279− let mut res = HashMap::new();
280− map_node(&mut res, &self.0, &mut Vec::new());
285impl Deref for Keymap {
285impl Deref for Keymap {