如何插入反斜杠?

jon*_*nes 4 elisp

所以我一直在寻找一种方法来将Emacs键盘宏保存为elisp代码 - 将Emacs键描述语言替换'insert-kbd-macro为映射到宏键的实际函数.

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

(symbol-name
    (key-binding "\C-xo"))
Run Code Online (Sandbox Code Playgroud)

会返回字符串 "other-window"

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

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

(key-description "\346")
Run Code Online (Sandbox Code Playgroud)

回报 "M-f"

但是为了被接受key-binding,它需要以"\ Mf"形式表示符号)

一个明显的方法是这样做

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

然而emacs的永远只能返回"\\""\"

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

(byte-to-string 92)
Run Code Online (Sandbox Code Playgroud)

它返回 '\\'

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

Tre*_*son 6

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

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

(key-binding (read-kbd-macro "M-f"))
Run Code Online (Sandbox Code Playgroud)

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

(insert "\\")
Run Code Online (Sandbox Code Playgroud)

但是,为了省去很多焦虑,你可能想放弃这种努力,因为目前无法以一般方式将键盘宏转换为elisp.请参阅"将Emacs宏转换为Elisp"的问题.