Previous: , Up: Macros   [Contents][Index]


13.6 Indenting Macros

マクロ定義では、マクロ呼び出しをTABがどのようにインデントすべきか指定するために、declareフォーム(Defining Macrosを参照してください)を使うことができます。インデント指定は以下のように記述します:

(declare (indent indent-spec))

以下は利用できるindent-specです:

nil

これはプロパティーを指定しない場合と同じ — 標準的なインデントパターンを使用します。

defun

この関数を‘def’構造 — 2番目の行がbodyの開始 — と同様に扱います。

整数: number

関数の最初のnumber個の引数は区別され、残りは式のbodyと判断されます。その式の中の行は、最初の引数が区別されているかどうかにしたがってインデントされます。引数がbodyの一部である場合、その行はこの式の先頭の 開きカッコ(open-parenthesis)よりもlisp-body-indentだけ多い列にインデントされます。引数が 区別されていて、1つ目または2つ目の引数である場合は、2倍余分にインデントされます。引数が区別されていて1つ目あるいは2つ目の引数でない場合、その行は標準パターンによってインデントされます。

シンボル: symbol

symbolは関数名です。その関数はこの式のインデントを計算するために呼び出される関数です。この関数は2つの引数をとります:

pos

その行のインデントが開始される位置です。

state

その行の開始まで解析されたとき、parse-partial-sexp(インデントとネスト深さの計算のためのLispプリミティブ)によりreturnされる値です。

これは、数(その行のインデントの列数)、またはそのような数がcarであるようなリストをreturnすべきです。数とリストの違いは、数の場合、同じネスト深さの後続のすべての行はこの数と同じインデントとなります。リストの場合、後続の行は異なるインデントを呼び出すかもしれません。これは、C-M-qによりインデントが計算されるときに違いがでます。値が数の場合、C-M-qはリストの終わりまでの後続の行のインデントを、再計算する必要はありません。