我在Emacs的*scratch*
中,然后尝试
(describe-key "C-x C-f")
我回来
"C - x SPC C - f is undefined"
显然,它无法识别我的C-x C-f
速记。它期望什么?文档
显示由KEY调用的功能的文档。 KEY可以是任何一种键序列;它可以包括键盘事件,鼠标事件,和/或菜单事件。从程序调用时,将KEY作为字符串传递或向量。
没有详细说明应如何输入字符串或向量。我需要它做什么才能工作?
C-h f kbd
,您将获得:((kbd KEYS)
将密钥转换为内部Emacs密钥表示形式。 KEYS应该是由“ C-h k”(“ describe-key”)之类的命令返回的格式的字符串。与用于保存键盘宏的格式相同(请参阅“ edmacro模式”。)
您真正按下的是[24 6]
两个字符的向量(字符内部表示为整数,而24和6是表示Control-x和Control-f的整数)。描述这两个字符的向量的另一种方式是由两个字符组成的字符串:"\C-x\C-f"
是一种方式,正如Alex Ott在其答案中指出的那样。等效地,"\x18\x6"
使用24和6的十六进制值。或"\030\006"
使用八进制值。
kbd
从描述转换为字符的实际序列:(kbd "C-x C-f") --> "^X^F"
实际上是两个字符:Control-x和Control-f。 lisp打印机使用脱字符号表示法来表示它们,因此在引号之间看起来像是四个字符,但这就是它们的显示方式:如果在*scratch*
缓冲区中执行上述操作,请将光标放在左引号上,然后按下向右箭头或C-f
,您会发现引号之间只有两个字符。
[G0 Emacs Lisp手册的Character Type部分及其子部分中对此进行了详细说明。