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


20.2 Defining Commands

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

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

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