我想知道是否存在反向(kbd)
函数,我可以使用该函数从密钥代码中获取对其有意义的描述,例如来自C-b
的{{1}}。
通常2
确实有用,但不适用于前一个例子以及许多其他例子,因为特别是在Emacs上的键绑定通常比单个字符更复杂,即使它们确实是单个字符,它们可以是空格或制表符。
文档函数似乎使用函数(format "%c" x)
,它是用C编写的,因此是不可变的,如果可能的话,我想避免使用该路由,并以我的方式操作数据发烧友特色。
答案 0 :(得分:11)
您可能正在寻找(key-description KEYS &optional PREFIX)
。
例如:(key-description [2])
和(key-description (kbd "C-b"))
评估为"C-b"
。
答案 1 :(得分:3)
kbd逆的定义
(defun my-kbd-inverse (key)
(if (numberp key)
(setq key (vector key)))
(key-description key))
测试
(defvar my-example-keys nil)
(setq my-example-keys
(list 2 3 ?a
24
[?\C-x ?l]
(list "C-x" "A")
[(meta right) (meta left)]
(kbd "<f9>")
(kbd "<C-f9>")
(kbd "C-M-a")
[24 f9 97]))
(cl-loop for key in my-example-keys
do
(princ (my-kbd-inverse key))
(terpri))
如果有任何密钥可以传递给global-set-key
,但无法使用my-kbd-inverse
的当前定义,请与我们联系。
旁注:有一个原因,键描述不会将字符作为参数。有两个角色:
一个字符只是一个数字。字符没有单独的数据类型。
有一种感觉,一个角色不是一把钥匙。角色是输入事件。一系列输入事件形成键序列(键盘快捷键),键序列称为键,简而言之。字符?a
不是键,而是矢量[a]
和字符串“a”。功能global-set-key
和key-description
仅使用键。