Emacs describe-key 期望输入什么?

What does Emacs describe-key expect for input?

我在 Emacs 中 *scratch* 我尝试

(describe-key "C-x C-f")

然后我回来

"C - x SPC C - f is undefined"

显然,它无法识别我的 C-x C-f shorthand。它期望什么?文档

Display documentation of the function invoked by KEY. KEY can be any kind of a key sequence; it can include keyboard events, mouse events, and/or menu events. When calling from a program, pass KEY as a string or a vector.

没有详细说明应该如何输入该字符串或向量。我需要什么才能让它工作?

您需要指定为(describe-key "\C-x\C-f")(describe-key (kbd "C-x C-f"))

如果您调用 C-h f kbd,您将获得:

(kbd KEYS)

Convert KEYS to the internal Emacs key representation. KEYS should be a string in the format returned by commands such as ‘C-h k’ (‘describe-key’).

This is the same format used for saving keyboard macros (see ‘edmacro-mode’).

您需要准确指定键。 "C-x C-f"是由大写字母C、破折号、小写字母x、space等组成的字符串:它是一个描述 你按什么。

你真正按下的是 [24 6] 两个字符的向量(字符在内部表示为整数,24 和 6 分别是表示 Control-x 和 Control-f 的整数)。描述这两个字符的向量的另一种方法是作为一个由两个字符组成的字符串:"\C-x\C-f" 是一种方式,正如 Alex Ott 在他的回答中指出的那样;等效地 "\x18\x6" 使用 24 和 6 的十六进制值;或者 "0[=17=]6" 使用八进制值。

但我们宁愿使用描述 "C-x C-f",所以(正如 Alex Ott 在他的回答中再次指出的那样)kbd 将描述转换为实际的字符序列:

(kbd "C-x C-f") --> "^X^F"

实际上是两个字符:Control-x 和 Control-f。 lisp 打印机使用插入符号表示它们,因此引号之间看起来像四个字符,但这就是它们的显示方式:如果您在 *scratch* 缓冲区中执行上述操作,请将光标放在左侧引用并按向右箭头或 C-f,您会看到引号之间只有两个字符。

GNU Emacs Lisp 手册的 Character Type 部分及其小节中解释了所有这些以及更多内容。