[2] Emacs には local variable なる機構があります。 >>6
[4] local variable はファイルごとに file local variable
(file variable)
として記述できます。
>>6
file local variable は
-*- 行や local variables list
によって設定できます。
[5] local variable はディレクトリーごとに directory variable
として記述できます。
>>6
directory variable はディレクトリー内に特定のファイル名のファイルを配置することによって設定できます。
-*- 行[7] -*- 行は、 -*- ではじまり -*-
で終わる記述を含めたものです。
>>6, >>55
[9]
-*- が3つ以上含まれる場合の挙動はドキュメント上明らかではありません。
[10]
-*- の間は、 ; 区切りのリストと解釈されます。 >>6, >>55
[12]
末尾が ; でも構わないようです。 >>6
あるいは空の項目があっても構わないのかもしれません。
[11]
; で区切られた各リスト項目は、名前と値を :
で区切ったものです。 >>6, >>55
[13]
ドキュメント上は : の後に1つ (空白) が置かれています。
; の後にも1つ が置かれています。
先頭や末尾にも1つ が置かれています。
>>6, >>55 どこまでが要件なのか明らかではありませんが、
名前と値と : と ; の前後の空白の個数は任意であるようにも思われます。
[14]
リスト項目に : が2つ以上含まれる場合の挙動はドキュメント上明らかではありません。
最初のものが区切りで、それ以後は値の一部になるのでしょうか、
それともエラーとして無視されるのでしょうか。
[39]
mode のみを指定する -*- では、
mode: は省略できます
>>42, >>38。
[17]
-*- 行は、原則としてファイルの最初の行とします。
>>6
[19] shebang がある場合、第2行とできます。 >>6
[20]
man page の '\" 行がある場合、第2行とできます。 >>6
-*- 行が同じ行であっても構わないようです >>3。
ただし shebang 側の処理で -*- 以下も無視されませんから、
指定した命令に於いて適切に処置されることが前提になります。[59]
Ruby の魔法注釈の一種の -*- 構文は、最初の行という制約はないように見えます。
ただし
top-level magic comment
の
encoding = coding は最初の行または shebang
の次の行でなければならないようです >>55。
[18] 改行がないファイルの挙動はドキュメント上明らかではありません。
[16] この構文はかなり古く、 Emacs の歴史の始まりの頃からあるらしいです。
[41] Emacs 以外でもこれに対応したものは少なくありません。
ただし coding に限る場合や、
特定の mode に限る場合が多いようです。
coding
[56] Ruby は魔法注釈の構文の1つとして採用しています。 >>55
[25]
local variables list
は、
Local Variables:
を含む行で始まり、
End:
を含む行で終わるものです。
[27]
Local Variables:
の前後には他の文字列があっても構いません。
それらは以後の行から除去されます。
>>6
[29] 除去が必須なのかどうか (除去するべきものがないとき何らかのエラーとして無視されたりするのか) ドキュメント上は明らかではありません。
[30] 除去対象の認識時や除去時に空白がどう扱われるのかドキュメント上は明らかではありません。 ドキュメント上の例文を見ると、余分な空白は柔軟に扱われていそうです。
[32]
例文では : の後には (空白) が1個書かれています。
空白の配置にどれだけの柔軟性があるのかドキュメント上は明らかではありません。
[33]
値の最後に \ を書くと次の行に値を続けることができます。
>>6
\ と改行は値から除去されるようです。
[21]
局所変数群リストは、
ファイルの末尾に配置します。
ファイル末の3000字より前にあるべきではなく、
FORM FEED よりは後になければなりません。
>>6
mode は、 major mode を設定します。
>>6eval は、 Lisp式を実行します。
>>6coding unibyte は、 t が設定されたとき、
Emacs Lisp のファイルを unibyte mode
で読み込みまたはコンパイルします。
>>6[57]
Ruby は魔法注釈の構文として -*-* を採用しています。
構文は Emacs のものとよく似ていますが、
Emacs の局所変数ではなく
Ruby の魔法注釈の指令の指定と解釈されます >>55。
[58]
指令の1つとして encoding = coding があります >>55。
名前を coding とし、値を Emacs と Ruby
の共通のものを選べば、どちらにも対応できます。
[24]
その後、
mode 以外について、
まず -*- 行のものを適用し、
次に局所変数群リストのものを適用します。
>>6
[38] 特別なものを含め、同じ変数名を複数回記述することができるようです。
mode や eval によって設定過程が観測可能と思われます。
[3] File Local Variables in Emacs and Markdown Mode, , https://jblevins.org/log/file-local-variables
[40] 一部では Hey Emacs と呼ばれているようです。