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


20.2.1 Using interactive

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

Special Form: interactive arg-descriptor

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

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

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

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

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

Function: interactive-form function

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


Footnotes

(10)

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