すべてのバッファーはメジャーモードをもっており、そのバッファーがカレントである間の編集の動作を決定します。モードラインには通常カレントのメジャーモード名がカッコ内に表示されます(モードラインを参照してください)。
もっとも特殊化されていないメジャーモードは、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モード(メールの送信を参照)、下位のシェルプロセスとの通信用のバッファーのための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ファイルに以下のような行を追加しても変更できます(Emacs初期化ファイルを参照してください):
(setq-default major-mode 'text-mode)
major-mode
のデフォルト値がnil
の場合、メジャーモードは前のカレントバッファーから引き継がれます。
特殊化されたメジャーモードは、特定のキーにたいして、そのモードにより適した何かを行うよう、意味づけが変更される場合があります。たとえばプログラミングに関連するモードでは、TABには、カレント行をその言語のルールにしたがってインデントする機能がバインドされます(インデントを参照してください)。一般的に変更されるキーはTAB、DEL、C-jです。多くのモードがモード自身の特別なコマンドを定義しており、それらは通常、プレフィクスキーがC-cであるようなキーシーケンスにバインドされます。メジャーモードはユーザーオプションと変数も変更できます。たとえばプログラミングに間するモードは通常、変数comment-start
にバッファーローカルな値をセットします。これはソースコードのコメントがどのように区切られるかを決定します(コメントの操作を参照してください)。
カレントメジャーモードのキーバインディング一覧も含めたドキュメントを閲覧するには、C-h m
(describe-mode
)とタイプします。その他のヘルプコマンドを参照してください。
Fundamentalモード以外のすべてのメジャーモードは、モードフック(mode
hook)を定義します。これはバッファーでそのモードが有効になるたびに実行される、カスタマイズ可能なLisp関数のリストです。フックに間する詳細は、フックを参照してください。各モードフックはメジャーモード名の後に名前がつけられます。たとえばFortranモードのモードフックは、fortran-mode-hook
です。さらに、すべてのテキストベースのメジャーモードは、text-mode-hook
を実行し、多くの、プログラミング言語のモード(Emacsとともに配布されるものを含む)
は、その言語モード自身のモードフックの前に、prog-mode-hook
を実行します11
。フック関数は変数major-mode
の値を調べて、どのモードに入ろうとしているか調べることができます。
モードフックは、一般的にマイナーモードを有効にするために使用されます(マイナーモードを参照)。たとえば以下の行をinitファイルに記述すると、すべてのテキストベースのメジャーモードでFlyspellマイナーモード(スペルのチェックと訂正を参照)を、Emacs LispモードでElDocマイナーモード(プログラミング言語ドキュメントの照会を参照)を有効にすることができます:
(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を参照)。