Next: , Previous: , Up: Command Loop   [Contents][Index]


21.2 コマンドの定義

スペシャルフォームinteractiveはLisp関数をコマンドに変更します。interactiveフォームは関数bodyのトップレベルに置かなければならず、通常はbody内の最初のフォームとして記述されます。これはラムダ式(Lambda Expressionsを参照)とdefun (Defining Functionsを参照)の両方を受け入れます。このフォームはその関数が実際に実行される間は何も行いません。このフォームの存在はフラグとしての役割りをもち、Emacsコマンドループにたいしてその関数がインタラクティブに呼び出せることを告げます。interactiveフォームの引数はインタラクティブな呼び出しが引数を読み取る方法を指定します。

interactiveフォームのかわりに、関数シンボルのinteractive-formプロパティで指定されることもあります。このプロパティが非nil値なら、関数body内のinteractiveフォームより優先されます。この機能はほとんど使用されません。

インタラクティブに呼び出されることだけを意図していて、決してLispから直接呼び出されない関数が時折あります。この場合には、直接あるいはdeclare (Declare Formを参照)を通じて、その関数のinteractive-onlyプロパティに非nilを与えます。これにより、そのコマンドがLispから呼び出されるとバイトコンパイラーが警告を発します。describe-functionの出力にはこれに類似する情報が含まれます。このプロパティの値には文字列、t、または任意のシンボルを指定できます。文字列なら、それはバイトコンパイラーによる警告内で直接使用されます(最初は大文字でなくピリオドで終端される文字列であること。たとえば\"use (system-name) instead.\")。シンボルなら、それはLispコード内で使用されるかわりの関数です。

ジェネリック関数(Generic Functionsを参照)にinteractiveフォームを追加してコマンドにすることはできません。