モードライン

ファイル局所変数 (Emacs)

公式情報

局所変数

[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ディレクトリー内に特定のファイル名ファイルを配置することによって設定できます。 directory variable

-*-

[7] -*- は、 -*- ではじまり -*- で終わる記述を含めたものです。 >>6, >>55

[8] -*- の前や -*- の後は無視されるようです。

[15] 従ってプログラミング言語等の注釈として配置できます。

[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

[49] shebang-*- が同じであっても構わないようです >>3。 ただし shebang 側の処理で -*- 以下も無視されませんから、 指定した命令に於いて適切に処置されることが前提になります。

[59] Ruby魔法注釈の一種の -*- 構文は、最初のという制約はないように見えます。 ただし top-level magic commentencoding = coding は最初のまたは shebang の次のでなければならないようです >>55

[60] >>55 だと shebang が1行目で魔法注釈が2行目と限定されていますが、 古めのドキュメントだと shebang が1行目以外となる場合も説明されています。 -*- coding -*-

[18] 改行がないファイルの挙動はドキュメント上明らかではありません。


[16] この構文はかなり古く、 Emacs の歴史の始まりの頃からあるらしいです。

[41] Emacs 以外でもこれに対応したものは少なくありません。 ただし coding に限る場合や、 特定の mode に限る場合が多いようです。 coding

[56] Ruby魔法注釈の構文の1つとして採用しています。 >>55

[52] Emacs の正式な用語ではないようですが、 モード行 (modeline) と呼ばれることがあります。

[53] 同様の機能をモード行と呼ぶものもあります。 vim:, Kate Modelines

[50] Emacs 以外の実装事例:

局所変数群リスト

[25] local variables list は、 Local Variables: を含むで始まり、 End: を含むで終わるものです。

[27] Local Variables: の前後には他の文字列があっても構いません。 それらは以後の行から除去されます。 >>6

[28] 従ってプログラミング言語等の注釈として記述できます。

[29] 除去が必須なのかどうか (除去するべきものがないとき何らかのエラーとして無視されたりするのか) ドキュメント上は明らかではありません。

[30] 除去対象の認識時や除去時に空白がどう扱われるのかドキュメント上は明らかではありません。 ドキュメント上の例文を見ると、余分な空白は柔軟に扱われていそうです。

[31] 間の各には名前と値を : で区切って書きます。

[32] 例文では : の後には (空白) が1個書かれています。 空白の配置にどれだけの柔軟性があるのかドキュメント上は明らかではありません。

[33] 値の最後に \ を書くと次のに値を続けることができます。 >>6 \改行は値から除去されるようです。

[21] 局所変数群リストは、 ファイルの末尾に配置します。 ファイル末の3000字より前にあるべきではなく、 FORM FEED よりは後になければなりません。 >>6

[26] 局所変数群リストが複数あるときの挙動はドキュメント上は明らかではありません。

ファイル変数として記述できる特別な変数名


[57] Ruby魔法注釈の構文として -*-* を採用しています。 構文は Emacs のものとよく似ていますが、 Emacs局所変数ではなく Ruby魔法注釈指令の指定と解釈されます >>55

[58] 指令の1つとして encoding = coding があります >>55。 名前を coding とし、値を EmacsRuby の共通のものを選べば、どちらにも対応できます。 -*- coding -*-

処理

[22] mode は、指定があり次第適用します。 >>6

[23] -*- が先で局所変数群リストが後で記述順、 ということと思われますが、ドキュメント上は明らかではありません。

[24] その後、 mode 以外について、 まず -*- のものを適用し、 次に局所変数群リストのものを適用します。 >>6

[38] 特別なものを含め、同じ変数名を複数回記述することができるようです。 modeeval によって設定過程が観測可能と思われます。

関連

テキストファイル

sniffing, コメントの中身が意味を持ってしまう

vim:

メモ

[3] File Local Variables in Emacs and Markdown Mode, , https://jblevins.org/log/file-local-variables

[40] 一部では Hey Emacs と呼ばれているようです。