22.2 定义命令

特殊形式 interactive 将 Lisp 函数转变为命令。 interactive 形式必须位于函数体的顶层,通常作为函数体中的第一个形式; 这对 lambda 表达式(see Lambda 表达式)和 defun 形式(see 定义函数)均适用。 该形式在函数实际执行期间不做任何操作;它的存在只是一个标记, 告诉 Emacs 命令循环该函数可以被交互式调用。 interactive 形式的参数指定交互式调用时应如何读取参数。

另外,也可以在函数符号的 interactive-form 属性中指定 interactive 形式。 该属性的非 nil 值优先级高于函数体本身中的任何 interactive 形式。 此特性很少使用。

有时,某个函数仅用于交互式调用,从不从 Lisp 中直接调用。 在这种情况下,可以直接或通过 declare(see declare 形式) 为函数设置非 nilinteractive-only 属性。 如果该命令从 Lisp 中被调用,字节编译器会发出警告。 describe-function 的输出也会包含类似信息。 该属性的值可以是: 一个字符串,字节编译器会直接在警告中使用它(应以句号结尾,且不以大写字母开头, 例如 "use (system-name) instead."); t; 或任何其他符号,该符号应是可在 Lisp 代码中使用的替代函数。

泛型函数(see 泛型函数)无法通过添加 interactive 形式转变为命令。

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike