スペシャルフォームinteractive
はLisp関数をコマンドに変更します。interactive
フォームは関数bodyのトップレベルに置かなければならず、通常はbody内の最初のフォームとして記述されます。これはラムダ式(ラムダ式を参照)とdefun
(関数の定義を参照)の両方を受け入れます。このフォームはその関数が実際に実行される間は何も行いません。このフォームの存在はフラグとしての役割りをもち、Emacsコマンドループにたいしてその関数がインタラクティブに呼び出せることを告げます。interactive
フォームの引数はインタラクティブな呼び出しが引数を読み取る方法を指定します。
interactive
フォームのかわりに、関数シンボルのinteractive-form
プロパティで指定されることもあります。このプロパティが非nil
値なら、関数body内のinteractive
フォームより優先されます。この機能はほとんど使用されません。
インタラクティブに呼び出されることだけを意図していて、決してLispから直接呼び出されない関数が時折あります。この場合には、直接あるいはdeclare
(declare
フォームを参照)を通じて、その関数のinteractive-only
プロパティに非nil
を与えます。これにより、そのコマンドがLispから呼び出されるとバイトコンパイラーが警告を発します。describe-function
の出力にはこれに類似する情報が含まれます。このプロパティの値には文字列、t
、または任意のシンボルを指定できます。文字列なら、それはバイトコンパイラーによる警告内で直接使用されます(最初は大文字でなくピリオドで終端される文字列であること。たとえば"use
(system-name) instead."
)。シンボルなら、それはLispコード内で使用されるかわりの関数です。
ジェネリック関数(ジェネリック関数を参照)にinteractive
フォームを追加してコマンドにすることはできません。