Next: Mode Help, Previous: Major Mode Conventions, Up: Major Modes [Contents][Index]
ファイルをvisitするとき、ファイル名やファイル自体の内容などの情報を元に、Emacsはそのバッファーにたいするメジャーモードを選択します。また、ファイルのテキスト内で指定されたローカル変数も処理します。
この関数は、カレントバッファーにたいして適切なメジャーモードと、バッファーローカル変数のバインディングを設定する。これはまずset-auto-mode
(以下参照)を呼び出し、その後にhack-local-variables
を実行してパース処理を行って、そのファイルのローカル変数(File Local Variablesを参照)を適切にバインド、または評価する。
normal-mode
のfind-file引数が非nil
の場合、normal-mode
はfind-file
関数が自身を呼び出したとみなす。この場合、normal-mode
はそのファイル内の‘-*-’行の、またはファイルの最後にあるローカル変数を処理するかもしれない。これを行うかどうかは、変数enable-local-variables
が制御する。ファイルのローカル変数セクションの構文は、See Local Variables in Files in The GNU Emacs Manualを参照のこと。
インタラクティブにnormal-mode
を実行した場合、引数find-fileは通常nil
である。この場合、normal-mode
は無条件に任意のファイルローカル変数を処理する。
この関数は、メジャーモードを選択するためにset-auto-mode
を呼び出す。この関数がモードを特定しない場合、そのバッファーのmajor-mode
(以下参照)のデフォルト値により決定されるメジャーモードに留まる。
normal-mode
は、メジャーモードコマンド呼び出しの周囲にcondition-case
を使用するので、エラーはcatchされて、‘File
mode specification error’とともに、元のエラーメッセージがその後に報告される。
この関数は、カレントバッファーにたいして適切なメジャーモードを選択する。この選択は、関数自身の(優先順位による)決定にもとづく。優先順位は、‘-*-’行、ファイル終端近傍の任意の‘mode:’ローカル変数、‘#!’行(interpreter-mode-alist
を使用)、バッファーの先頭のテキスト(magic-mode-alist
を使用)、最後がvisitされるファイル名(auto-mode-alist
を使用)の順である。How Major Modes are Chosen in The GNU Emacs
Manualを参照のこと。enable-local-variables
がnil
の場合、set-auto-mode
は‘-*-’行、およびファイル終端近傍にたいして、modeタグのチェックを何もしない。
モード特定のためにファイル内容をスキャンするのがふさわしくないファイルタイプがいくつかある。たとえば、tarアーカイブファイルの終わり付近に、特定のファイルにたいしてモードを指定するローカル変数セクションをもつアーカイブメンバーファイルが、たまたま含まれているかもしれない。これは、そのファイルを含むtarファイルに適用されるべきではないだろう。同様に、tiffイメージファイルが、‘-*-’パターンにマッチするように見える行を、最初の行に偶然含むかもしれない。これらの理由により、これらのファイル拡張子はどちらもinhibit-local-variables-regexps
リストのメンバーになっている。Emacsが、(モード指定に限らず)ファイルから任意の種類のローカル変数を検索することを防ぐには、このリストにパターンを追加する。
keep-mode-if-sameが非nil
の場合は、すでにそのバッファーが適切なメジャーモードをもつとき、この関数はモードコマンドを呼び出さない。たとえばset-visited-file-name
は、ユーザーがセットしたかもしれないバッファーローカル変数をkillするのを防ぐために、これをt
にセットする。
この関数は、bufferのメジャーモードを、major-mode
のデフォルト値にセットする。major-mode
がnil
の場合は、(それが適切なら)カレントバッファーのメジャーモードを使用する。例外として、bufferの名前が*scratch*の場合は、モードをinitial-major-mode
にセットする。
バッファーを作成する低レベルのプリミティブはこの関数を使用しないが、switch-to-buffer
やfind-file-noselect
のような中位レベルのコマンドは、バッファーを作成するときは、常にこの関数を使用する。
この変数の値は、*scratch*バッファーの初期のメジャーモードを決定する。値は、メジャーモードコマンドであるようなシンボルであること。デフォルト値はlisp-interaction-mode
である。
この変数は、‘#!’行内のコマンドインタープリターを指定するスクリプトにたいして使用するメジャーモードを指定する。変数の値は、(regexp
.
mode)
の形式の要素をもつalistである。これは、そのファイルが\\`regexp\\'
にマッチするインタープリターを指定する場合は、modeを使用することを意味する。たとえば、デフォルト要素の1つは("python[0-9.]*"
. python-mode)
である。
この変数の値は、(regexp
function)
という形式の要素をもつalistである。ここで、regexpは正規表現、functionは関数、またはnil
である。ファイルをvisitした後に、バッファーの先頭のテキストがregexpにマッチした場合、functionが非nil
ならset-auto-mode
はfunctionを呼び出す。functionがnil
の場合は、auto-mode-alist
がモードを決定する。
これはmagic-mode-alist
と同様に機能するが、そのファイルにたいしてauto-mode-alist
がモードを指定しない場合だけ処理される点が異なる。
この変数は、ファイル名パターン(正規表現)と対応するメジャーモードコマンドの連想配列を含む。通常、ファイル名パターンは、‘.el’や‘.c’のようなサフィックスをテストするが、必須ではない。このalistの通常の要素は(regexp
. mode-function)
のようになる。
たとえば、
(("\\`/tmp/fol/" . text-mode) ("\\.texinfo\\'" . texinfo-mode) ("\\.texi\\'" . texinfo-mode)
("\\.el\\'" . emacs-lisp-mode) ("\\.c\\'" . c-mode) ("\\.h\\'" . c-mode) …)
バージョン番号およびバックアップ用サフィックスをもつファイルをvisitしたとき、それらはfile-name-sans-versions
(File Name Componentsを参照)を使用して展開されたファイル名(File Name Expansionを参照)から取り除かれてregexpとマッチされて、set-auto-mode
は対応するmode-functionを呼び出す。この機能により、ほとんどのファイルにたいしてEmacsが適切なメジャーモードを選択することが可能になる。
auto-mode-alist
の要素が(regexp function
t)
という形式の場合は、functionを呼び出した後、Emacsは前回マッチしなかったファイル名部分にたいしてマッチするために、再度auto-mode-alist
を検索する。この機能は、圧縮されたパッケージにたいして有用である。("\\.gz\\'"
function
t)
という形式のエントリーは、ファイルを解凍してから、‘.gz’抜きのファイル名にたいして適切なモードに解凍されたファイルを配す。
以下はauto-mode-alist
の先頭に、複数のパターンペアーを追加する方法の例である(あなたは、initファイル内でこの種の式を使ったことがあるかもしれない)。
(setq auto-mode-alist (append ;; ドットで始まる(ディレクトリー名付きの)ファイル名 '(("/\\.[^/]*\\'" . fundamental-mode) ;; ドットのないファイル名 ("/[^\\./]*\\'" . fundamental-mode) ;; ‘.C’で終わるファイル名 ("\\.C\\'" . c++-mode)) auto-mode-alist))