ファイルローカル変数が危険な場合もあります。他の誰かのファイルをvisitするとき、そのファイルのローカル変数リストがEmacsに何を行なうか、告げるものはありません。eval
“variable”や、その他のload-path
などにたいする不正な値は、実行する意図がないLispコードを実行するかもしれません。
したがって、安全と判っていないファイルローカル変数を発見した場合、Emacsはファイルのローカル変数リスト全体を表示して、それらをセットする前に継続するか尋ねます。yまたはSPCをタイプすると、ローカル変数リストは効果をもち、nの場合は無視します。Emacsがバッチモード(初期化オプションを参照してください)で実行されている場合、Emacsは確認することができないので、nと応えられたとみなします。
Emacsは通常、特定の変数/値ペアーが安全だと認識できます。たとえばcomment-column
やfill-column
には、任意の整数値を与えても安全です。ファイルが安全だと判っている変数/値ペアーだけを指定する場合、Emacsはそれらをセットする前に確認を求めません。そうでない場合、確認プロンプトで!とタイプすることにより、このファイル内のすべての変数/値ペアーが安全なことを記録するようEmacsに指示できます。その後、Emacsが同じファイルまたは別のファイルで、これらの変数/値ペアーに出会うと、これらを安全だとみなします。
同意を求めるプロンプトでiとタイプすることによって、ファイル内のすべての変数/値ペアーを永続的に無視するようEmacsに指示することもできます。それ以降は、これらのペアーはそのファイルと他のすべてのファイルで無視されるようになります。
ディレクトリーローカル変数(ディレクトリーごとのローカル変数を参照)のセットについてEmacsが確認を求める際には、入力を求めるプロンプトで+をタイプすればすべての変数をセットするとともにsafe-local-variable-directories
(下記参照)のリストにたいしてそのディレクトリーの追加も行います。これにより将来のセッションにおいても、このディレクトリーが任意のディレクトリーローカル変数をロードしても安全だとEmacsがみますようになります。応答として+を使用するのは、コンテンツが信頼できるディレクトリーにかぎるべきです。
load-path
のようないくつかの変数は、特に危険(risky)だと判断されます。これらをローカル変数として指定すべき理由はほとんどなく、それらを変更するのは危険です。ファイルに危険なローカル変数だけが含まれる場合、Emacsは確認プロンプトで!の選択肢を提示することも、それを受け入れることもしません。ファイル内のいくつかのローカル変数が危険で、いくつかの変数は潜在的に安全ではない場合は、プロンプトで!を入力できます。これはすべての変数に適用されますが、危険ではない変数だけを将来のセッションのために安全とマークします。もし危険な変数を安全な値として記録したいと本当に望むなら、‘safe-local-variable-values’をカスタマイズすることによりこれを行ないます(Easy Customizationインターフェースを参照)。同様に永続的に無視されるべき危険な変数の値を記録したければ、ignored-local-variable-values
をカスタマイズしてください。
特定のディレクトリーのディレクトリー変数については常に信頼することにより、たとえ危険な変数であってもそれらのディレクトリーからローカル変数をロードする際には確認を求めるプロンプトをスキップできれば便利な場合もあるでしょう。変数safe-local-variable-directories
はそのようなディレクトリーを保持するための変数です。このリストのディレクトリー名は完全な絶対ファイル名でなければなりません。変数enable-remote-dir-locals
が非nil
値の場合には、このリストにリモートディレクトリーも含めることができます。
変数enable-local-variables
により、Emacsがローカル変数を処理する方法を変更できます。デフォルト値はt
で、これは上述の振る舞いを指定します。nil
の場合、Emacsは単にすべてのファイルローカル変数を無視します。:safe
は安全な値だけを使用して、残りは無視します。:all
はEmacsにたいして値が安全か否かに関わらず、すべてのファイルローカル変数をセットするよう指示します(恒常的に使用しないよう推奨)。他の値の場合、安全と判っている値かどうかの決定を試みずに、ローカル変数をもつ各ファイルごとに尋ねます。
変数enable-local-eval
は、Emacsがeval
変数を処理するかどうかを制御します。enable-local-variables
のように、変数に対する可能な値は3つで、t
、nil
、およびそれ以外です。デフォルトは、t
やnil
ではないmaybe
で、通常Emacsはeval
変数を処理するときに確認を求めます。
例外として、評価する任意のeval
形式が、変数safe-local-eval-forms
で指定された形式の場合、Emacsは確認を求めません。