Next: , Previous: , Up: Variables   [Contents][Index]


11.12 Directory Local Variables

ディレクトリーは、そのディレクトリー内のすべてのファイルに共通なローカル変数値を指定することができます。Emacsは、そのディレクトリー内の任意のファイルをvisitしているバッファー内で、それらの変数にたいするバッファーローカルなバインディングを作成するために、これを使用します。これは、そのディレクトリー内のファイルが何らかのプロジェクトに属していて、同じローカル変数を共有するときなどに有用です。

ディレクトリーローカル変数を指定するために、2つの異なる方法があります: 1つは特別なファイルにそれを記述する方法、もう1つはそのディレクトリーにプロジェクトクラス(project class)を定義する方法です。

Constant: dir-locals-file

この定数は、Emacsがディレクトリーローカル変数が見つけることができる期待する、ファイルの名前です。ファイル名は、.dir-locals.el8です。ディレクトリー内でその名前をもつファイルにより、Emacsはディレクトリー内の任意のファイル、または任意のサブディレクトリー(オプションでサブディレクトリーを除外できます。以下を参照してください)にセッティングを適用します。独自に.dir-locals.elをもつサブディレクトリーがある場合、Emacsはサブディレクトリーで見つかった1番深いファイルのディレクトリーからディレクトリーツリーを上方に移動しながら、1番深いファイルのセッティングを使用します。このファイルは、ローカル変数をフォーマットされたリストとして指定します。詳細は、Per-directory Local Variables in The GNU Emacs Manualを参照してください。

Function: hack-dir-local-variables

この関数は.dir-locals.elファイルを読み込み、そのディレクトリー内の任意のファイルをvisitしているバッファーにたいしてローカルなfile-local-variables-alist内に、それらを適用することなくディレクトリーローカル変数を格納します。この関数はディレクトリーローカルなセッティングもdir-locals-class-alist(.dir-locals.elファイルが見つかったディレクトリーにたいする特別なクラスを定義する)内に格納します。この関数は、以下で説明するように、dir-locals-set-class-variablesおよびdir-locals-set-directory-classを呼び出すことにより機能します。

Function: hack-dir-local-variables-non-file-buffer

この関数はディレクトリーローカル変数を探して、即座にそれらをカレントバッファーに適用します。これはDiredバッファーのような、非ファイルバッファーをディレクトリーローカル変数のセッティングにしたがわせるために、モードコマンド呼び出しの中から呼び出されることを意図したものです。非ファイルバッファーにたいしては、Emacsはdefault-directoryと、その親ディレクトリーの中から、ディレクトリーローカル変数を探します。

Function: dir-locals-set-class-variables class variables

この関数は、classという名前がつけられたシンボルにたいして、一連の変数セッティングを定義します。その後このクラスを1つ以上のディレクトリーに割り当てることができ、するとEmacsはこれらの変数セッティングを、それらのディレクトリー内のすべてのファイルに適用します。variables内のリストは、2つの形式 — (major-mode . alist)または(directory . list) — のうち1つをもつことができます。1番目の形式では、そのファイルのバッファーがmajor-modeを継承するモードに切り替わるときに、連想リストalist内のすべての変数が適用されます。alistは、(name . value)という形式です。major-modeにたいする特別な値nilは、そのセッティングが任意のモードに適用できることを意味します。alist内では、特別なnameとして、subdirsを使用することができます。連想値がnilの場合、alistは関連するディレクトリー内のファイルだけに適用され、それらのサブディレクトリーには適用されません。

variablesの2番目の形式では、directoryがそのファイルのディレクトリーの最初のサブディレクトリーの場合、上記のルールにしたがって、listが再帰的に適用されます。listは、この関数のvariablesで指定できる2つの形式のうち、1つを指定します。

Function: dir-locals-set-directory-class directory class &optional mtime

この関数はdirectoryおよびサブディレクトリー内のすべてのファイルにclassを割り当てます。その後、classにたいして指定されたすべての変数セッティングは、directoryおよびその子ディレクトリー内でvisitされた任意のファイルに適用されます。classは事前にdir-locals-set-class-variablesで定義されていなければなりません。

Emacsは、.dir-locals.elファイルからディレクトリー変数をロードするとき、内部的にこの関数を使用します。その場合、オプションの引数mtimeは、ファイルの修正日時(modification time。file-attributesによりreturnされる)を保持します。Emacsは、記憶されたローカル変数がまだ有効化チェックするために、この日時を使用します。ファイルを通じ手ではなく直接クラスを割り当てる場合、この引数はnilになります。

Variable: dir-locals-class-alist

このalistはクラスシンボル(class symbol)と連想変数セッティング(associated variable settings)を保持します。これはdir-locals-set-class-variablesにより更新されます。

Variable: dir-locals-directory-cache

このalistはディレクトリー名、それらに割り当てられたクラス名、およびこのエントリーに関連するディレクトリーローカル変数ファイルの修正日時を保持します。関数dir-locals-set-directory-classは、このlistを更新します。

Variable: enable-dir-local-variables

nilの場合、ディレクトリーローカル変数は無視されます。この変数は、ファイルローカル変数(File Local Variablesを参照してください)にしたがい、ディレクトリーローカル変数は無視したいモードにたいして有用かもしれません。


Footnotes

(8)

MS-DOS版のEmacsは、DOSファイルシステムの制限により、かわりに_dir-locals.elという名前を使用します。