如何插入反斜杠?

时间:2013-08-05 20:42:42

标签: elisp

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

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

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

将返回字符串"other-window"

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

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

(key-description "\346")

返回"M-f"

然而,为了被key-binding接受,它需要以“”\ M-f“形式表示符号

显而易见的方法是

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

然而,emacs只返回"\\"而不是"\"

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

(byte-to-string 92)

返回'\\'

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

2 个答案:

答案 0 :(得分:6)

答案是不要插入 - 使用read-kbd-macro获取可与key-descriptionkey-binding一起使用的可读文字。

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

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

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

进行插入
(insert "\\")

但是,为了省去很多焦虑,你可能想放弃这项工作,因为目前无法以一般方式将键盘宏转换为elisp。请参阅问题"Convert Emacs macro into Elisp"

答案 1 :(得分:1)

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

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

然后:

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

表示我现在合并'Meta'':'来获取'\'