通常,出于历史原因,emacs将TAB
密钥代码和C-i
密钥视为相同,参见cf。有关功能键的emacs lisp文档或abo-abo关于“ TAB和?有什么区别?”问题的答案 。
注:在这篇文章中,键编码是
TAB
,<tab>
和C-i
; 另一方面tab,Ctrl+ 和+ i是键盘上的物理键。但是,此刻,emacs将
TAB
和C-i
视为相同,即(equal (kbd "TAB") (kbd "C-i"))
->t
。
但是,由于我们不再生活在计算的困境中,所以我发现这非常烦人。有一些建议可以解决此问题,例如
input-decode-map
Ctrli我正在寻找使用+ 将+ 映射到一些后ASCII控制代码。除了不能与kbd
宏一起正常工作外,这意味着必须修改将绑定Ctrl+ 的源代码的所有位i。考虑到所有源代码均已正确修改,这可以说是最好的解决方案。采用
(kbd "<tab>")
了tab和(kbd "C-i")
(这相当于(kbd "TAB")
即在\t
字面)为Ctrl+ i 做的工作,但你不得不修改所有这些使用了错误类型的源文件tab[阅读:键码TAB
]这是烦人。
例如在github问题和emacs.sx中都提出了这个建议。
这些解决方案都不是真正的解决方案,我宁愿考虑它们(现有bug)的变通办法或黑客手段。
有没有办法强制 emacs映射tab到
(kbd "<tab>")
和,(kbd "TAB")
而Ctrl+ i被映射为(kbd "C-i")
缺少对emacs源代码的修改呢?这种做法应该是在用户完全不可见,这意味着tab像键码
<tab>
,并TAB
应该映射到一个而结合Ctrl+ i类似的键码C-i
应该映射到另一个结合。
不太严重的一点是:这里的任何emacs开发人员可以评论是否会在某个时候在emacs源代码中对其进行更改/修复?
kbd
将TAB翻译为[tab]。它仅适用于Emacs的预加载部分。
TAB
和C-i
(根据代码的定义,不是键)是一个并且相同TAB
。