我想从Lisp函数调用键盘宏。我希望在一些自定义错误处理中进行分层。
convertPoint:toView
是以mykey
格式存储在文本文件中的键盘宏。
我使用(fset ...)
加载它,并且在使用load-file
调用时工作正常。
当我执行此函数并插入M-x mykey
时,我只获得当前缓冲区中显示的键的名称,而不是它的执行。我缺少一步吗?
mykey
答案 0 :(得分:4)
尝试
(defun gn-batch-search (key-name)
"Execute a keyboard macro that has already been loaded."
(interactive "sName of macro key:")
(execute-kbd-macro (intern key-name)))
您遇到的问题是"sName of macro key:"
交互式规范会提示用户并返回字符串,并且您希望运行名称为的命令由这个字符串描述。这就解释了为什么它没有做你想要的以及为什么你需要intern
。
至于它为什么会这样做:键盘宏被表示为事件的向量,其中事件可以是鼠标点击或按键操作。事实证明,字符串被视为一种向量(向量字符),字符也是一个事件(它表示当您在键盘上按下该字符时发送的事件),因此字符串{{ 1}}是一个有效的键盘宏,表示按下 h 然后按 i 的行为,所以当你运行这个宏时,它(通常)会最终插入“本身“在当前缓冲区中(除了特殊缓冲区,如dired,"hi"
,...其中 h 和 i 绑定到其他命令)。
此外,您可以使用*Help*
而不是execute-kbd-macro
,它可以使用“任何”命令,无论是定义为键盘宏还是普通函数。