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


20.2 コマンドの定義

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

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

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