GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Safe-File-Variables.html ・ emacs-doc.conao3.com

51.2.4.2 ファイル変数の安全性

ファイルローカル変数は危険を伴うことがあります。他人のファイルを開いた際、そのファイルのローカル変数リストが自身のEmacsにどのような影響を及ぼすかは分かりません。evalという「変数」やその他のload-pathといった変数に不適切な値が設定されていると、意図しないLispコードが実行されてしまう可能性があります。

したがって、Emacs は安全であることが確認されていないファイルローカル変数の値に遭遇するたびに、そのファイルのローカル変数リスト全体を表示し、それらを設定する前に確認を求めます。y または SPC と入力してローカル変数リストを適用したり、n と入力してそれを無視したりできます。Emacs をバッチモードで実行する場合(初期オプション を参照)、実際に確認を求めることができないため、回答として n が想定されます。

Emacsは通常、特定の変数/値のペアを安全であると認識します。例えば、comment-column や fill-column に任意の整数値を指定しても安全です。ファイルに既知の安全な変数/値のペアのみが指定されている場合、Emacsはそれらを設定する前に確認を求めません。それ以外の場合は、確認プロンプトで ! と入力することで、このファイル内のすべての変数/値のペアを安全として記録するようEmacsに指示できます。その後、同じファイル内または他のファイルでこれらの変数/値のペアが現れた際、Emacsはそれらを安全であるとみなします。

また、確認プロンプトで i と入力することで、ファイル内のすべての変数/値ペアを恒久的に無視するように Emacs に指示することもできます。これにより、以降、このファイルおよび他のすべてのファイルにおいて、これらのペアは無視されるようになります。

Emacs がディレクトリローカル変数(ディレクトリごとのローカル変数を参照)の設定について確認を求めた際、確認プロンプトで + と入力すると、すべての変数が設定されるとともに、そのディレクトリが safe-local-variable-directories(後述)のリストに追加されます。これにより、Emacs は今後、このディレクトリをディレクトリローカル変数を読み込む上で安全なディレクトリとして扱うようになります。+ という応答は、内容が信頼できるディレクトリに対してのみ使用してください。

load-path などの一部の変数は、特にリスクが高いと見なされます。これらをローカル変数として指定する理由はほとんどなく、変更すると危険な場合があります。ファイルにリスクの高いローカル変数のみが含まれている場合、Emacs は確認プロンプトで ! を入力として提示せず、また受け付けもしません。ファイル内のローカル変数の一部がリスクが高く、一部が潜在的に安全でないだけである場合は、プロンプトで ! を入力できます。これにより、すべての変数が適用されますが、リスクのないものだけが将来的に安全であるとマークされます。リスクの高い変数に対して本当に安全な値を記録したい場合は、‘safe-local-variable-values’ をカスタマイズして直接行ってください(簡単なカスタマイズインターフェースを参照)。同様に、恒久的に無視すべきリスクの高い変数の値を記録したい場合は、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 の場合と同様に、t、nil、およびそれ以外の値の3通りです。デフォルトは maybe であり、これは t でも nil でもないため、通常 Emacs は eval 変数の処理について確認を求めます。

例外として、eval フォームが変数 safe-local-eval-forms 内に現れる場合、Emacs はそのフォームを評価する際に確認を求めることはありません。