Next: , Up: メジャーモードとマイナーモード   [Contents][Index]


24.1 メジャーモード

すべてのバッファーはメジャーモードをもっており、そのバッファーがカレントである間の編集の動作を決定します。モードラインには通常カレントのメジャーモード名がカッコ内に表示されます(モードラインを参照してください)。

もっとも特殊化されていないメジャーモードは、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には、カレント行をその言語のルールにしたがってインデントする機能がバインドされます(インデントを参照してください)。一般的に変更されるキーはTABDELC-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)

Footnotes

(11)

より具体的には、そのモードはprog-modeから“派生”したモードです(Derived Modes in The Emacs Lisp Reference Manualを参照)。