Next: , Previous: Multi-line Indent, Up: Program Indent


20.5.3 Lispの字下げのカスタマイズ

Lisp式に対する字下げの仕方を、 その式から呼ばれる関数と関係付けることができます。 各Lisp関数に対して、あらかじめ定義された字下げパターンの中から選んだり、 Lispプログラムで任意のものを定義したりできます。

字下げの標準パターンは、つぎのとおりです。 式の開始行に関数呼び出しの引数がある場合は、 最初の引数の直下に2行目がくるように字下げします。 それ以外の場合は、関数名の直下に2行目がくるように字下げします。 続く各行は、入れ子の深さが同じである行の字下げと同じになります。

変数lisp-indent-offsetnil以外ならば、 式の2行目に対する通常の字下げパターンを無効にして、 式の開始桁からつねにlisp-indent-offsetだけ字下げします。

標準パターンが使用されない関数もいくつかあります。 名前がdefで始まる関数に対しては、 式を開始する開き括弧の桁位置にlisp-body-indentを加えた桁位置へ 2行目がくるように字下げします。

関数名の属性lisp-indent-functionを変更すれば、 各関数ごとに標準パターン以外の字下げを施せます。 この属性が取りえる値にはつぎの4つがあります。

nil
属性がないのと同じ。標準の字下げパターンを使用する。
defun
名前がdefで始まる関数に用いる字下げパターンを使用する。
数値 number
関数の最初のnumber個の引数を区別された引数と呼び、 残りを式の本体と呼ぶ。 行の最初の引数が区別された引数かどうかによって、各行の字下げが異なる。 引数が本体の一部ならば、それを含んだ式を開始する開き括弧の桁位置に lisp-body-indentを加えた桁位置へ字下げする。 引数が区別された引数で最初か2番目ならば、 lisp-body-indent2倍を加えた桁位置へ字下げする。 引数が区別された引数であっても3番目以降ならば、標準パターンを適用する。
シンボルsymbol
symbolは関数名であること。 この関数は、当該式の字下げ幅を計算する。 この関数はつぎの2つの引数を受け取る。
state
当該行の先頭までを解析したときのparse-partial-sexp (字下げと入れ子の計算を行うLispの基本的な関数)の戻り値。
pos
字下げ対象の行の開始位置。
この関数は、当該行に対する字下げ幅の桁数、あるいは、 リストのcarがそのような数値であるリストを返す必要がある。 数値を返した場合は、括弧の入れ子レベルが同じ行に対しては 同じ字下げ幅を意味する。 リストを返した場合は、後続の行に対しては字下げ幅が異なる可能性を意味する。 このような差異は、C-M-qで字下げを計算するときに現れる。 数値が返された場合、C-M-qは、リストの末尾に達するまでは、 字下げの再計算を行う必要がない。