【发布时间】:2015-01-20 07:38:21
【问题描述】:
我在宏中定义了一系列键并将其插入到我的 .emacs 中,如下所示:
(fset 'xxx [keys])
有没有办法在 defun 函数中调用 kbd 宏 xxx? 我试着把它当作普通函数来调用,但它有一个错误“xxx的定义是无效的”
提前谢谢你。
【问题讨论】:
我在宏中定义了一系列键并将其插入到我的 .emacs 中,如下所示:
(fset 'xxx [keys])
有没有办法在 defun 函数中调用 kbd 宏 xxx? 我试着把它当作普通函数来调用,但它有一个错误“xxx的定义是无效的”
提前谢谢你。
【问题讨论】:
选项 1:
(execute-kbd-macro 'foo)
选项 2...
有两种方法可以为宏生成代码:
name-last-kbd-macro 和 kmacro-name-last-macro
前者倾向于生成如您所展示的代码。
后者方便地绑定到 C-xC-kn,为宏生成 lambda 形式 -- 即一个函数 -- 这意味着你可以在代码中调用它。
所以:
foo RET
foo
insert-kbd-macro RET foo RET
(foo) 的代码。【讨论】:
execute-kbd-macro 使用它的函数槽(如文档所述)。
从 Elisp 运行命令的方法是调用 execute-command。这适用于交互功能以及键盘宏。
【讨论】: