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


11.11 File Local Variables

ファイルにローカル変数の値を指定できます。そのファイルをvisitしているバッファー内で、これらの変数にたいしてバッファーローカルなバインディングを作成するために、Emacsはこれらを使用します。ファイルローカル変数の基本的な情報については、Local Variables in Files in The GNU Emacs Manualを参照してください。このセクションはファイルローカル変数が処理される方法に影響する関数と変数を説明します。

ファイルローカル変数が勝手に関数や、後で呼び出されるLisp式を指定できる場合、ファイルのvisitによりEmacsが乗っ取られてしまうかもしれません。Emacsは、指定された値が安全だと既知のファイルローカル変数だけを自動的にセットすることにより、この危険から保護します。これ以外のファイルローカル変数は、ユーザーが同意した場合のみセットされます。

追加の安全策として、Emacsがファイルローカル変数を読み込むとき、一時的にread-circlenilにバインドされます(Input Functionsを参照してください)。これはLispリーダー循環および共有されたLisp構造(Circular Objectsを参照してください)を認識することを防ぎます。

User Option: enable-local-variables

この変数はファイルローカル変数を処理するかどうかを制御します。以下の値が利用できます:

t(デフォルト)

安全な変数をセットして、安全でない変数については問い合わせます(1回)。

:safe

安全な変数だけをセットして、問い合わせはしません。

:all

問い合わせをせずに、すべての変数をセットします。

nil

変数をセットしません。

その他

すべての変数にたいして問い合わせます(1回)。

Variable: inhibit-local-variables-regexps

これは正規表現のリストです。ファイルがこのリストの要素にマッチする名前をもつ場合、任意のファイルローカル変数のフォームはスキャンされません。どんなときにこれを使いたいかの例は、See Auto Major Modeを参照してください。

Function: hack-local-variables &optional mode-only

この関数は、カレントバッファーの内容により指定された任意のローカル変数として、必要に応じてバインドと評価を行います。変数enable-local-variablesは、ここでも効果をもちます。しかし、この関数は‘-*-行の、‘mode:’ローカル変数を探しません。set-auto-modeはこれを行い、enable-local-variablesも考慮されます(Auto Major Modeを参照してください)。

この関数は、file-local-variables-alist内に格納されたalistを調べて、各ローカル変数を順に適用することにより機能します。この関数は、変数に適用する前(または後)に、before-hack-local-variables-hook(またはhack-local-variables-hook)を呼び出します。alistが非nilの場合のみ、事前のフック(before-hook)を呼び出し、その他のフックは常に呼び出します。この関数は、そのバッファーがすでにもつメジャーモードと同じメジャーモードが指定された場合には、‘mode’要素を無視します。

オプションの引数mode-onlyが非nilの場合、この関数が行うのはメジャーモードを指定するシンボルをreturnするのがすべてで、‘-*-行またはローカル変数リストがメジャーモードを指定していればそのモード、それ以外はnilをreturnします。この関数はモードや他のファイルローカル変数をセットしません。

Variable: file-local-variables-alist

このバッファーローカルな変数は、ファイルローカル変数のセッティングのalistを保持します。alistの各要素は(var . value)という形式で、varはローカル変数のシンボル、valueはその値です。Emacsがファイルをvisitするとき、最初にすべてのファイルローカル変数をこのalistに収集して、その後に変数1つずつに関数hack-local-variablesを適用します。

Variable: before-hack-local-variables-hook

Emacsは、file-local-variables-alistに格納されたファイルローカル変数を適用する直前に、このフックを呼び出します。

Variable: hack-local-variables-hook

Emacsは、file-local-variables-alistに格納されたファイルローカル変数を適用し終えた直後に、このフックを呼び出します。

ある変数にたいしてsafe-local-variableプロパティーにより、安全な値を指定できます。このプロパティーは引数を1つとる関数です。与えられた値にたいして、その関数が非nilをreturnした場合、その値は安全です。一般的に目にするファイル変数の多くは、safe-local-variableプロパティーをもちます。これらのファイル変数には、fill-columnfill-prefixindent-tabs-modeが含まれます。ブーリーン値の変数にたいしては、プロパティーの値にbooleanpを使用します。

defcustomを使用してユーザーオプションを定義するとき、defcustomに引数:safe functionを追加することにより、safe-local-variableプロパティーをセットできます(Variable Definitionsを参照してください)。

User Option: safe-local-variable-values

この変数は、ある変数の値が安全であることをマークする、別の方法を提供します。これはコンスセル(var . val)のリストで、varは変数名、valはその変数にたいして安全な値です。

Emacsが一連のファイルローカル変数にしたがうかどうかユーザーに尋ねるとき、ユーザーはそれらの変数が安全だとマークすることができます。安全だとマークするとsafe-local-variable-valuesにこれらのvariable/valueペアーが追加され、ユーザーのカスタムファイルに保存します。

Function: safe-local-variable-p sym val

この関数は、上記の条件に基づき、symに値valを与えても安全な場合は、非nilをreturnします。

いくつかの変数は危険(risky)だと判断されます。ある変数が危険な場合、その変数が自動的にsafe-local-variable-valuesに追加されることはありません。ユーザーがsafe-local-variable-valuesを直接カスタマイズすることにより、明示的に値を許さない限り、危険な変数をセットする前にEmacsは常に確認を求めます。

名前が非nilrisky-local-variableプロパティーをもつ任意の変数は、危険だと判断されます。defcustomを使用してユーザーオプションを定義するとき、defcustomに引数:risky valueを追加することにより、ユーザーオプションにrisky-local-variableプロパティーをセットできます。それに加えて名前が‘-command’、‘-frame-alist’、‘-function’、‘-functions’、‘-hook’、‘-hooks’、‘-form’、‘-forms’、‘-map’、‘-map-alist’、‘-mode-alist’、‘-program’、‘-predicate’で終わる任意の変数は、自動的に危険だと判断されます。後に数字をともなう変数‘font-lock-keywords’および‘font-lock-keywords’、さらに‘font-lock-syntactic-keywords’も危険だと判断されます。

Function: risky-local-variable-p sym

この関数は、symが上記の条件にもとづき危険な変数の場合は、非非nilをreturnします。

Variable: ignored-local-variables

この変数はファイルによりローカル値を与えられるべきではない変数のリストを保持します。これらの変数に指定された任意の値は、完全に無視されます。

Eval:’“変数”も抜け道になる可能性があるので、Emacsは通常、それを処理する前に確認を求めます。

User Option: enable-local-eval

この変数は‘-*-’行中、またはvisitされるファイル内のローカル変数リストの、‘Eval:’にたいする処理を制御します。値tは、無条件に実行することを意味します。nilは、それらを無視することを意味します。それ以外は、各ファイルにたいして何を行うか、ユーザーに確認を求めることを意味します。デフォルト値は、maybeです。

User Option: safe-local-eval-forms

この変数は、ファイルローカル変数リスト内の‘Eval:’“変数”の中、評価しても安全な式のリストを保持します。

その式が関数呼び出しで、その関数がsafe-local-eval-functionプロパティーをもつ場合、そのプロパティー値はその式の評価が安全かどうかを決定します。プロパティー値は、その式をテストするための述語(predicate)、そのような述語のリスト(成功した述語があれば安全)、またはt(引数が定数である限り常に安全)を指定できます。

テキストプロパティーは、それらの値に関数呼び出しを含めることができるので、抜け道になる可能性があります。したがって、Emacsはファイルローカル変数にたいして指定された文字列値から、テキストプロパティーを取り除きます。