Previous: , Up: ファイル内のローカル変数   [Contents][Index]


50.2.4.2 安全なファイル変数

ファイルローカル変数が危険な場合もあります。他の誰かのファイルをvisitするとき、そのファイルのローカル変数リストがEmacsに何を行なうか、告げるものはありません。eval “variable”や、その他のload-pathなどにたいする不正な値は、実行する意図がないLispコードを実行するかもしれません。

したがって、安全と判っていないファイルローカル変数を発見した場合、Emacsはファイルのローカル変数リスト全体を表示して、それらをセットする前に継続するか尋ねます。yまたはSPCをタイプすると、ローカル変数リストは効果をもち、nの場合は無視します。Emacsがバッチモード(初期化オプションを参照してください)で実行されている場合、Emacsは確認することができないので、nと応えられたとみなします。

Emacsは通常、特定の変数/値ペアーが安全だと認識できます。たとえばcomment-columnfill-columnには、任意の整数値を与えても安全です。ファイルが安全だと判っている変数/値ペアーだけを指定する場合、Emacsはそれらをセットする前に確認を求めません。そうでない場合、確認プロンプトで!とタイプすることにより、このファイル内のすべての変数/値ペアーが安全なことを記録するようEmacsに指示できます。その後、Emacsが同じファイルまたは別のファイルで、これらの変数/値ペアーに出会うと、これらを安全だとみなします。

同意を求めるプロンプトでiとタイプすることによって、ファイル内のすべての変数/値ペアーを永続的に無視するようEmacsに指示することもできます。それ以降は、これらのペアーはそのファイルと他のすべてのファイルで無視されるようになります。

load-pathのようないくつかの変数は、特に危険(risky)だと判断されます。これらをローカル変数として指定すべき理由はほとんどなく、それらを変更するのは危険です。ファイルに危険なローカル変数だけが含まれる場合、Emacsは確認プロンプトで!の選択肢を提示することも、それを受け入れることもしません。ファイル内のいくつかのローカル変数が危険で、いくつかの変数は潜在的に安全ではない場合は、プロンプトで!を入力できます。これはすべての変数に適用されますが、危険ではない変数だけを将来のセッションのために安全とマークします。もし危険な変数を安全な値として記録したいと本当に望むなら、‘safe-local-variable-values’をカスタマイズすることによりこれを行ないます(Easy Customizationインターフェースを参照)。同様に永続的に無視されるべき危険な変数の値を記録したければ、ignored-local-variable-valuesをカスタマイズしてください。

変数enable-local-variablesにより、Emacsがローカル変数を処理する方法を変更できます。デフォルト値はtで、これは上述の振る舞いを指定します。nilの場合、Emacsは単にすべてのファイルローカル変数を無視します。:safeは安全な値だけを使用して、残りは無視します。:allはEmacsにたいして値が安全か否かに関わらず、すべてのファイルローカル変数をセットするよう指示します(恒常的に使用しないよう推奨)。他の値の場合、安全と判っている値かどうかの決定を試みずに、ローカル変数をもつ各ファイルごとに尋ねます。

変数enable-local-evalは、Emacsがeval変数を処理するかどうかを制御します。enable-local-variablesのように、変数に対する可能な値は3つで、tnil、およびそれ以外です。デフォルトは、tnilではないmaybeで、通常Emacsはeval変数を処理するときに確認を求めます。

例外として、評価する任意のeval形式が、変数safe-local-eval-formsで指定された形式の場合、Emacsは確認を求めません。