【发布时间】:2015-02-08 02:49:43
【问题描述】:
在许多情况下,emacs 不会完全按照应有的方式执行 kbd 宏。例如
(execute-kbd-macro (read-kbd-macro "C-x C-f"))
而不是使用打开的 minibuffer Find file: ... emacs 结束此宏的执行,而是打开第一个可用文件或 dired 缓冲区(取决于具体情况)。如何执行这样的 kbd 宏而不产生这样的误解?
Upd 2. 这只是这种键盘宏的示例,其行为与原始行为不同(即按下 C-x C-f)。下面是grep 的另一个示例。
更新。正如@lawlist 提到的,我可以使用
(key-binding (kbd "C-x C-f"))
用于将键序列转换为命令名称。但它只有在有命令时才有效。在更复杂的情况下,例如
(execute-kbd-macro (read-kbd-macro "C-u M-x grep RET"))
这种“蛮力”方法不起作用(我想继续编辑 grep 的模式,但 emacs 强制完成交互)。
【问题讨论】:
-
我认为这个相关的帖子可能会回答你的问题?:emacs.stackexchange.com/a/7495/2287
-
谢谢,但仅限于最简单的情况。在每种特定情况下,我似乎必须手动将键序列转换为等效命令。
-
我看不出宏和这个有什么关系?你不是只是在这里运行函数吗?
C-x C-f不是宏,它默认调用函数find-file -
但是
(execute-kbd-macro (read-kbd-macro "C-x C-f"))是一个宏,它的行为与函数find-file调用不完全相同。见更新 2。