Emacsは、ファイル名やファイル自体の情報をもとに、 当該ファイルを訪問するときの新しいバッファに対する メジャーモードを自動的に選択します。 また、ファイル内のテキストで指定されたローカル変数も処理します。
基本(fundamental)モードは、特化してないメジャーモードである。 他のメジャーモードは、実質的には、このモードとの対比で定義されている。 つまり、基本(fundamental)モードから始めて、 それらのメジャーモードではなにを変更するかを定義している。 関数
fundamental-mode
はフックを実行しないため、 読者はカスタマイズできない。 (Emacsの基本(fundamental)モードのふるまいを変えたければ、 Emacsの大局的な状態を変える必要がある。)
この関数は、カレントバッファに対して 適切なメジャーモードとバッファローカルな変数を確立する。 この関数はまず
set-auto-mode
を呼び出し、 続いて、ファイルのローカル変数を必要に応じて解析、束縛、評価するためにhack-local-variables
を実行する。
normal-mode
に対する引数find-fileがnil
以外であると、normal-mode
はfind-file
から呼び出されたと仮定する。 その場合、ファイルの末尾や‘-*-’の形式の行にある ローカル変数リストを処理することもある。 変数enable-local-variables
は、この処理を行うかどうかを制御する。 ファイル内でのローカル変数リストの構文については、 See ファイルにローカルな変数。読者が対話的に
normal-mode
を実行すると 引数find-fileは通常nil
である。 その場合、normal-mode
は、ローカル変数リストを無条件に処理する。
normal-mode
は、メジャーモード関数を呼び出す周りではcondition-case
を使うので、エラーを補足して ‘File mode specification error’にもとのエラーメッセージを続けて エラーを報告する。
この変数は、訪問したファイル内のローカル変数リストを処理するかどうかを 制御する。 値
t
は、ローカル変数リストを無条件に処理することを意味する。nil
は、それらを無視することを意味する。 それ以外の値であると、各ファイルごとにユーザーに問い合わせる。 デフォルト値はt
である。
この変数は、ファイルのローカル変数リストで設定してはならない 変数のリストを保持する。 それらの変数に対して指定した値は無視される。
このリストに加えて、
属性risky-local-variable
がnil
以外の値である変数も無視されます。
この変数は、訪問したファイル内のローカル変数リストの‘Eval:’を 処理するかどうかを制御する。 値
t
は、それらを無条件に処理することを意味する。nil
は、それらを無視することを意味する。 それ以外の値であると、各ファイルごとにユーザーに問い合わせる。 デフォルト値はmaybe
である。
この関数は、カレントバッファに対して適切なメジャーモードを選択する。 ‘-*-’行の値、 (
auto-mode-alist
を使って)訪問したファイルの名前、 (interpreter-mode-alist
を使って)‘#!’行、 ファイルのローカル変数リストをもとに決定する。 しかし、この関数はファイルの末尾付近にある ローカル変数‘mode:’は調べないが、 関数hack-local-variables
は調べる。 See メジャーモードの選択方式。
この変数は、新たなバッファに対するデフォルトのメジャーモードを保持する。 標準値は
fundamental-mode
である。
default-major-mode
の値がnil
であると、 Emacsは(以前の)カレントバッファのメジャーモードを 新たなバッファのメジャーモードとする。 しかし、メジャーモードコマンドのシンボルの属性mode-class
の 値がspecial
であると、新たなバッファのメジャーモードにはせず、 かわりに基本(fundamental)モードを使う。 この属性を持つモードは、 特別に準備したテキストに対してのみ有用であるdiredやrmailなどである。
この関数はバッファbufferのメジャーモードを
default-major-mode
の値とする。 この変数がnil
であると、 (適切ならば)カレントバッファのメジャーモードを使う。バッファを作成する低レベルの基本関数ではこの関数を使わないが、
switch-to-buffer
やfind-file-noselect
などの 中レベルのコマンドではバッファを作成するときにこのコマンドを使う。
この変数の値は、最初のバッファ‘*scratch*’のメジャーモードを決定する。 値は、メジャーモードコマンドのシンボルであること。 デフォルト値は、
lisp-interaction-mode
である。
この変数は、ファイル名のパターン(正規表現、see Regular Expressions)と 対応するメジャーモードの連想リストを保持する。 通常、ファイル名パターンでは‘.el’や‘.c’などの接尾辞を調べるが、 そうでなくてもよい。 連想リストの通常の要素は
(
regexp.
mode-function)
の形である。たとえばつぎのとおり。
(("\\`/tmp/fol/" . text-mode) ("\\.texinfo\\'" . texinfo-mode) ("\\.texi\\'" . texinfo-mode) ("\\.el\\'" . emacs-lisp-mode) ("\\.c\\'" . c-mode) ("\\.h\\'" . c-mode) ...)展開したファイル名(see File Name Expansion)がregexpに一致する ファイルを訪問すると、
set-auto-mode
は対応するmode-functionを呼び出す。 この機能により、Emacsはほとんどのファイルに対して 適切なメジャーモードを選択する。
auto-mode-alist
の要素が(
regexp functiont)
の 形であると、functionを呼び出したあとで、 Emacsはファイル名のそれまで一致しなかった部分についてauto-mode-alist
を 再度探索する。 この機能は解凍パッケージには有用である。("\\.gz\\'"
functiont)
の形の要素で、 ファイルを解凍し、‘.gz’を除いたファイル名に従って 解凍済みファイルを適切なモードにできる。
auto-mode-alist
にいくつかのパターン対を追加する方法を示す。 (この種の式を読者のファイル.emacsに使える。)(setq auto-mode-alist (append ;; ドットで始まる(ディレクトリ名付きの)ファイル名 '(("/\\.[^/]*\\'" . fundamental-mode) ;; ドットのないファイル名 ("[^\\./]*\\'" . fundamental-mode) ;; ‘.C’で終るファイル名 ("\\.C\\'" . c++-mode)) auto-mode-alist))
この変数は、‘#!’行でコマンドインタープリタを指定している スクリプトに対して用いるメジャーモードを指定する。 この値は、
(
interpreter.
mode)
の形の要素から成る リストであること。 たとえば、デフォルトには("perl" . perl-mode)
の要素がある。 各要素は、ファイルが指定するインタープリタがinterpreterに 一致したらモードmodeを使うことを意味する。 interpreterの値は、実際には正規表現である。
auto-mode-alist
が使用すべきメジャーモードが 指定しなかった場合にのみこの変数を使う。