Next: Connection Local Variables, Previous: File Local Variables, Up: Variables [Contents][Index]
ディレクトリーは、そのディレクトリー内のすべてのファイルに共通なローカル変数値を指定することができます。Emacsはそのディレクトリー内の任意のファイルをvisitしているバッファー内で、それらの変数にたいするバッファーローカルなバインディングを作成するためにこれを使用します。これはそのディレクトリー内のファイルが何らかのプロジェクトに属していて、同じローカル変数を共有するときなどに有用です。
ディレクトリーローカル変数を指定するために2つの異なる方法があります: 1つは特別なファイルにそれを記述する方法、もう1つはそのディレクトリーにプロジェクトクラス(project class)を定義する方法です。
この定数はEmacsがディレクトリーローカル変数を見つけることができると期待するファイルの名前。ファイル名は.dir-locals.el9。ディレクトリー内でその名前をもつファイルによりEmacsはディレクトリー内の任意のファイル、または任意のサブディレクトリー(オプションでサブディレクトリーを除外できる。以下参照し)にセッティングを適用する。独自に.dir-locals.elをもつサブディレクトリーがある場合には、Emacsはサブディレクトリーで見つかったもっとも深いファイルのディレクトリーからディレクトリーツリーを上方に移動しながら、もっとも深いファイルのセッティングを使用する。この定数は2番目のdir-localsファイル.dir-locals-2.elの名前を導出するためにも使用される。この2番目のdir-localsファイルが与えられた場合には、そのファイルが.dir-locals.elのかわりにロードされる。これは.dir-locals.elがバージョンコントロールの共有リポジトリの配下にあって個人のカスタマイズ用に使用できないときに有用。このファイルはローカル変数をフォーマットされたリストとして指定する。詳細はPer-directory Local Variables in The GNU Emacs Manualを参照のこと。
この関数は.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
を呼び出すことにより機能する。
この関数はディレクトリーローカル変数を探して、即座にそれらをカレントバッファーに適用する。これはDiredバッファーのような、非ファイルバッファーをディレクトリーローカル変数のセッティングにしたがわせるために、モードコマンド呼び出しの中から呼び出されることを意図したものである。非ファイルバッファーにたいしては、Emacsはdefault-directory
とその親ディレクトリーの中から、ディレクトリーローカル変数を探す。
この関数はclassという名前がつけられたシンボルにたいして、一連の変数セッティングを定義する。ユーザーは後からこのクラスを1つ以上のディレクトリーに割り当てることができる。そしてEmacsはこれらの変数セッティングを、それらのディレクトリー内のすべてのファイルに適用するだろう。variables内のリストは2つの形式
— (major-mode . alist)
か(directory
. list)
—
のいずれかをもつことができる。1番目の形式ではそのファイルのバッファーがmajor-modeを継承するモードに切り替わるときに、連想リストalist内のすべての変数が適用される。alistは(name
.
value)
という形式。major-modeにたいする特別な値nil
は、そのセッティングが任意のモードに適用できることを意味する。alist内では特別なnameとして、subdirs
を使用することができる。連想値がnil
なら、alistは関連するディレクトリー内のファイルだけに適用され、それらのサブディレクトリーには適用されない。
variablesの2番目の形式では、directoryがそのファイルのディレクトリーの最初のサブディレクトリーなら、上記のルールにしたがいlistが再帰的に適用される。listはこの関数のvariablesで指定できる2つの形式のうち1つを指定する。
この関数はdirectory
とサブディレクトリー内のすべてのファイルにclassを割り当てる。その後、classにたいして指定されたすべての変数セッティングは、directoryとその子ディレクトリー内でvisitされたすべてのファイルに適用される。classは事前にdir-locals-set-class-variables
で定義されていなければならない。
Emacsが.dir-locals.el
ファイルからディレクトリー変数をロードする際、内部的にこの関数を使用する。その場合、オプションの引数mtimeはファイルの修正日時(modification
time。file-attributes
によりリターンされる)を保持する。Emacsは記憶されたローカル変数がまだ有効化チェックするために、この日時を使用する。ファイルを介さず直接クラスを割り当てる場合、この引数はnil
になる。
このalistはクラスシンボル(class
symbol)とそれに関連づけられる変数のセッティングを保持する。これはdir-locals-set-class-variables
により更新される。
このalistはディレクトリー名、それらに割り当てられたクラス名、およびこのエントリーに関連するディレクトリーローカル変数ファイルの修正日時を保持する。関数dir-locals-set-directory-class
はこのlistを更新する。
nil
ならディレクトリーローカル変数は無視される。この変数はファイルローカル変数(File Local Variablesを参照)にはしたがうが、ディレクトリーローカル変数は無視したいモードにたいして有用かもしれない。