GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Indenting-Macros.html ・ emacs-doc.conao3.com

14.6 マクロのインデント

マクロ定義内では、declare 形式(マクロの定義を参照)を使用して、TAB がマクロの呼び出しをどのようにインデントすべきかを指定できます。インデントの指定は次のように記述します。

(declare (indent indent-spec))

これにより、マクロ名に lisp-indent-function プロパティが設定されます。

indent-specの候補は以下の通りです:

nil

これはプロパティなしと同じです—標準的なインデントパターンを使用してください。

defun

この関数を「def」構文のように扱ってください。2行目をbodyの開始として解釈します。

整数、number

関数の最初の number 個の引数は区別された引数であり、残りは式の本体とみなされます。式内の各行は、その行の最初の引数が区別されているか否かに応じてインデントされます。引数が本体の一部である場合、その行は、包含する式の開始括弧からさらに lisp-body-indent 列分インデントされます。引数が区別されており、かつ第1引数または第2引数である場合は、その2倍の列数分だけ追加でインデントされます。引数が区別されており、かつ第1引数または第2引数ではない場合、その行は標準的なパターンに従います。

記号、symbol

symbol は関数名である必要があります。この関数は、この式内における行のインデントを計算するために呼び出されます。この関数は2つの引数を受け取ります:

pos

インデントされる行が始まる位置。

state

parse-partial-sexp(インデントおよびネスト計算用のLispプリミティブ)がこの行の先頭までパースした際に返す値。

この関数は、その行のインデント列数である数値か、あるいはその数値を car とするリストのいずれかを返す必要があります。数値を返す場合とリストを返す場合の違いは、数値の場合は同じネストレベルにある後続のすべての行をこの行と同様にインデントすべきであることを示し、リストの場合は後続の行によって異なるインデントが必要になる可能性があることを示す点にあります。これは、インデントが C-M-q によって計算される場合に違いが生じます。値が数値であれば、C-M-q はリストの末尾に達するまで、後続の行のインデントを再計算する必要はありません。

変数: lisp-indent-local-overrides

この変数を使用すると、lisp-indent-function シンボルプロパティ(シンボルプロパティを参照)で指定された特定のシンボルに適用されるインデント指定を上書きできます。この変数は、ファイルローカルまたはディレクトリローカルな変数として使用することを想定しています。The GNU Emacs Manualのファイル内のローカル変数を参照してください。

各キーはシンボルであり、各値はインデント指定で、シンボルの lisp-indent-function プロパティの値を上書きします。値には、前述のシンボルプロパティの値と同じ形式を指定できます。なお、関数の使用は安全ではないため避けるべきです。さもなければ、ファイルにアクセスするすべてのユーザーが、使用の可否を明示的に承認または拒否しなければならなくなります。

この変数は、関数 lisp-indent-function および common-lisp-indent-function で使用されます。後者の場合、シンボルプロパティ common-lisp-indent-function-for-elisp および common-lisp-indent-function は、lisp-indent-function プロパティだけでなく、この変数よりも優先されます。