22.16 键盘宏

A 键盘宏(keyboard macro)是一套预设的输入事件序列, 可被视为一条命令,并可作为某个键的定义。键盘宏的 Lisp 表述形式是 一个包含事件的字符串或向量。请不要将键盘宏与 Lisp 宏混淆 (see )。

Function: execute-kbd-macro kbdmacro &optional count loopfunc

该函数将 kbdmacro 作为事件序列来执行。 如果 kbdmacro 是一个字符串或向量,那么其中的事件会被 完全如同由用户输入那样地执行。该序列 要求是单一的键序列; 通常,一个键盘宏的定义由多个键序列拼接而成。

如果 kbdmacro 是一个符号(symbol),则其函数定义将被用作 kbdmacro。如果该定义又是另一个符号,则此过程会重复进行。 最终的结果应当是一个字符串或向量。如果结果既不是符号、字符串也不是向量, 则会发出错误信号。

参数 count 是重复次数(repeat count); kbdmacro 将被执行相应的次数。 如果省略 count 或其值为 nil, 则 kbdmacro 仅执行一次。 如果其值为 0,则 kbdmacro 将反复执行, 直到遇到错误或搜索失败为止。

如果 loopfuncnil,它是一个无参函数, 会在宏的每次迭代执行之前被调用。 若 loopfunc 返回 nil,则宏的执行将停止。

关于使用 execute-kbd-macro 的示例, see 读取单个事件

Variable: executing-kbd-macro

该变量包含当前正在执行的键盘宏的定义字符串或向量。 若当前没有执行任何宏,其值为 nil。 一个命令可以通过检测此变量, 使其在由正在执行的宏调用时表现出不同的行为。 请勿手动设置此变量。

Variable: defining-kbd-macro

当且仅当正在定义一个键盘宏时,该变量的值为非 nil。 一个命令可以通过检测此变量, 使其在宏定义过程中表现出不同的行为。 当向现有宏的定义中追加内容时,该变量的值为 append。 命令 start-kbd-macrokmacro-start-macroend-kbd-macro 会设置该变量—请勿手动设置它。

该变量始终是当前终端(terminal)的本地变量,不能成为缓冲区本地(buffer-local)的。 See Multiple Terminals

Variable: last-kbd-macro

该变量存放最近一次定义的键盘宏的定义。其值为字符串、向量或 nil

该变量始终是当前终端的局部变量,不能设为缓冲区局部变量。See Multiple Terminals

Variable: kbd-macro-termination-hook

该普通钩子会在键盘宏终止时运行,无论终止原因是什么(执行到宏末尾,或因错误提前结束宏)。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike