4

因此,我一直在寻找一种将 Emacs 键盘宏保存为 elisp 代码的方法 - 将 Emacs 键描述语言替换'insert-kbd-macro为映射到宏键的实际功能。

在这样做时,我首先查看了检索映射到键的函数,然后将这些函数呈现为要写入当前缓冲区的字符串

(symbol-name
    (key-binding "\C-xo"))

将返回字符串"other-window"

然而,目前insert-kbd-macro以插入符号(不是很好的人类可读的符号)保存宏(例如:^Pvs \C-p)该函数key-binding似乎只接受人类可读的符号。

因此,为了转换为人类可读的符号,我查看了函数key-description

(key-description "\346")

返回"M-f"

然而,为了被 接受key-binding,它需要 `"\Mf" 形式的符号)

一个明显的方法是

(concat "\\" (key-description "\346")

然而emacs只返回"\\""\"

为了弄清楚发生了什么,我决定查看字符的原始字节"\"显示为...。

(byte-to-string 92)

它返回'\\'

我怀疑这可能是elisp中的一个错误。

4

2 回答 2

6

答案是不要插入 /'s - 用于read-kbd-macro获取也适用于key-descriptionand的可读文本key-binding

(key-description (read-kbd-macro "M-f"))

(key-binding (read-kbd-macro "M-f"))

如果您真的想插入 a \,正如您在评论中注意到的那样,您可以通过

(insert "\\")

但是,为了让您省去很多麻烦,您可能想放弃这项工作,因为目前无法以一般方式将键盘宏转换为 elisp。请参阅问题“将 Emacs 宏转换为 Elisp”

于 2013-08-05T22:16:12.917 回答
1

我将此功能添加到我的 .emacs :

(defun insert-backs ()  
    "insert back-slash"
    (interactive)
    (insert "\\ "))

接着:

(global-set-key (kbd "M-:") 'insert-backs) ;调用定义的函数

意味着现在我结合'Meta'':' 得到我的'\'

于 2017-06-15T10:37:52.427 回答