Next: Minor Modes, Up: Modes [Contents][Index]
すべてのバッファーはメジャーモードをもっており、そのバッファーがカレントである間の編集の動作を決定します。モードラインには通常カレントのメジャーモード名がカッコ内に表示されます(Mode Lineを参照してください)。
もっとも特殊化されていないメジャーモードは、Fundamental(基本)モードと呼ばれます。このモードには、モード独自の再定義や変数設定がないので、各Emacsコマンドはもっとも一般的な振る舞いをし、各ユーザーオプションはデフォルトの状態になっています。
Lispや英文テキストのように、Emacsが認識できる特定のタイプのテキスト編集には、LispモードやTextモードのような、より特殊化されたメジャーモードを通常は使用します。ほとんどのメジャーモードは3つのグループに分けられます。最初のグループはプレインまたはマークアップされた通常テキストのためのモードを含みます。これにはTextモード、HTMLモード、SGMLモード、TeXモードやOutlineモードなどが含まれます。2番目のグループはプログラミング言語特有のモードです。これらは、Lispモード(いくつかの変種を有する)、Cモード、Fortranモードなどが含まれます。3番目のグループはファイルに直接関連付けられていないメジャーモードが含まれます。これらはEmacsが特別の目的のために作るバッファーで使用されるもので、Diredが作成するバッファーのためのDiredモード(Diredを参照してください)、C-x mで作成されるバッファーのためのMessageモード(Sending Mailを参照してください)、下位のシェルプロセスとの通信用のバッファーのためのShellモード(Interactive Shellを参照してください)などが含まれます。
通常、メジャーモードは最初にファイルをvisitしたとき、またはバッファーを作成したときに、Emacsにより自動的にセットされます。M-xコマンドを使うことにより、新しいメジャーモードを明示的に選択することができます。モードの名前に-mode
を追加することにより、モードを選択するコマンド名を得ることができます(たとえば、Lispモードを選択する場合はM-x
lisp-mode)。すべてのバッファーは厳密に1つのメジャーモードをもつので、メジャーモードを“オフ”にする方法はなく、かわりに他のメジャーモードに切り替えなければなりません。
バッファーローカルな変数major-mode
の値は、メジャーモードコマンドと同じ名前のシンボル(たとえばlisp-mode
)です。この変数は自動的にセットされます。あなた自身が変更するべきではありません。
major-mode
のデフォルト値は、メジャーモードが指定されていないファイルを使うときや、C-x
bで作成した新しいバッファーのメジャーモードを決定します。通常、デフォルト値はFundamentalモードを指定する、シンボルfundamental-mode
です。Customizationインターフェースを通じて、このデフォルト値を変更できます(Easy Customizationを参照してください)。initファイルに以下のような行を追加しても変更できます(Init Fileを参照してください):
(setq-default major-mode 'text-mode)
major-mode
のデフォルト値がnil
の場合、メジャーモードは前のカレントバッファーから引き継がれます。
特殊化されたメジャーモードは、特定のキーにたいして、そのモードにより適した何かを行うよう、意味づけが変更される場合があります。たとえばプログラミングに関連するモードでは、TABには、カレント行をその言語のルールにしたがってインデントする機能がバインドされます(Indentationを参照してください)。一般的に変更されるキーはTAB、DEL、C-jです。多くのモードがモード自身の特別なコマンドを定義しており、それらは通常、プレフィクスキーがC-cのコマンドにバインドされます。メジャーモードはユーザーオプションと変数も変更できます。たとえばプログラミングに間するモードは通常、変数comment-start
にバッファーローカルな値をセットします。これはソースコードのコメントがどのように区切られるかを決定します(Commentsを参照してください)。
カレントメジャーモードのキーバインディング一覧も含めたドキュメントを閲覧するには、C-h m
(describe-mode
)とタイプします。
Fundamentalモード以外のすべてのメジャーモードは、モードフック(mode
hook)を定義します。これはバッファーでそのモードが有効になるたびに実行される、カスタマイズ可能なLisp関数のリストです。フックに間する詳細は、Hooksを参照してください。各モードフックはメジャーモード名の後に名前がつけられます。たとえばFortranモードのモードフックは、fortran-mode-hook
です。さらに、すべてのテキストベースのメジャーモードは、text-mode-hook
を実行し、多くの、プログラミング言語のモード(Emacsとともに配布されるものを含む)
は、その言語モード自身のモードフックの前に、prog-mode-hook
を実行します10
。フック関数は変数major-mode
の値を調べて、どのモードに入ろうとしているか調べることができます。
モードフックは、一般的にマイナーモードを有効にするために使用されます(Minor Modesを参照してください)。たとえば以下の行をinitファイルに記述すると、すべてのテキストベースのメジャーモードでFlyspellマイナーモード(Spellingを参照してください)を、Emacs LispモードでEldocマイナーモード(Lisp Docを参照してください)を有効にすることができます:
(add-hook 'text-mode-hook 'flyspell-mode) (add-hook 'emacs-lisp-mode-hook 'eldoc-mode)
より具体的には、そのモードはprog-mode
から”派生”したモードです(Derived
Modes in The Emacs Lisp Reference Manualを参照)。