Next: , Up: Defining Commands   [Contents][Index]


22.2.1 interactiveの使用

このセクションでは、Lisp関数をインタラクティブに呼び出し可能なコマンドにするinteractiveフォームの記述方法と、コマンドのinteractiveフォームの検証方法について説明します。

Special Form: interactive &optional arg-descriptor &rest modes

このスペシャルフォームは関数がコマンドであり、したがって(M-xを通じて、またはそのコマンドにバインドされたキーシーケンスをエンターすることにより)インタラクティブに呼び出すことができることを宣言する。引数arg-descriptorは、そのコマンドがインタラクティブに呼び出されたときに引数を計算する方法を宣言する。

コマンドは他の関数と同じようにLisp関数から呼び出されるかもしれないが、その場合には呼び出し側は引数を提供して、arg-descriptorは効果をもたない。

interactiveフォームは関数body内のトップレベルに置くか、関数シンボルのinteractive-formプロパティ((Symbol Properties)を参照)になければならない。これはコマンドループが関数を呼び出す前にinteractiveフォームを調べることにより効果をもつ(Interactive Callを参照)。一度関数が呼び出されると関数body内のすべてのフォームが実行される。このときbody内にinteractiveフォームが出現しても、そのフォームは引数の評価さえされず単にnilをリターンする。

modesリストではコマンドの使用を意図したモードを指定できる。modes指定の効果と使用するタイミングに関する詳細はCommand Modesを参照のこと。

慣例によりinteractiveフォームは関数body内の最初のトップレベルフォームとするべきである。interactiveフォームがシンボルのinteractive-formプロパティと関数bodyの両方に存在する場合には前者が優先される。interactive-formフォームは既存の関数にinteractiveフォームを追加したり、その関数を再定義することなく引数をインタラクティブに処理する方法を変更するために使用できる。

引数arg-descriptorは以下の3つの可能性があります:

Function: interactive-form function

この関数はfunctioninteractiveフォームをリターンする。functionがインタラクティブに呼び出し可能な関数(Interactive Callを参照)なら、値はそのコマンドの引数を計算する方法を指定するinteractiveフォーム((interactive spec))である。それ以外では値はnilである。functionがシンボルなら、そのシンボルの関数定義が使用される。


Footnotes

(14)

いくつかの要素は実際に2つの引数を提供します。