自己在想命令与按键的绑定设计使用的数据结构是什么样的
首先可以想到的有
- 每个命令的按键绑定不一定存在
- 而命令与按键需要双向查找
我自己根据上面自己想了一下怎么实现
首先我使用数组
我将命令与按键绑定全部存入数组 ,
只不过有存放规则,每个命令与其对应按键绑定(没有按键绑定放个null
)一组放入
也就成了
|------|
| 命令 |
| 按键 |
| 命令 |
| null |
| 命令 |
| 按键 |
| 命令 |
| 按键 |
| 命令 |
| 按键 |
对所有命令处理时,从中 奇数遍历
对所有按键处理时,从中 偶数遍历
按键查命令 本身位置-1
命令查按键 本身位置+1
不知道真实情况是什么样的
就是map,不过有很多map,有优先级: GitHub - noctuid/evil-guide: Draft of a guide for using emacs with evil 。你可以直接C-h v
一个map的名字来看它的值,比如dired-mode-map
,可以看到它是一个key->command的alist,也就是个map。不过我不知道是怎么实现command到key的查找的。
用 C 函数 where-is-internal
对 keymap 搜索遍历得到的。这个函数会用 hashtable 缓存搜索结果。
你没有想到的有,每个命令可以对应多个按键,以及用 tree search 会比 linear search 快多了。
是怎么对 map 进行 tree search的?
那我得先问,对于比如 C-x 8 n o
这么个按健组合,你本來想怎么处理呢。
{command:['C-x','8','n','o']}
我没想到这个
多次按键 需要缓存记录每次的按键
确实成了 tree