所以我一直在寻找一种方法来将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中的一个错误.
答案是不要插入/' - 用于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"的问题.
| 归档时间: |
|
| 查看次数: |
537 次 |
| 最近记录: |