次: , 前: Modes, 上: Modes


22.1 メジャーモード

メジャーモードは、特定種類のテキストの編集向けにEmacsを特化します。 各バッファには、ある時点では1つのメジャーモードしかありません。

もっとも特化されていないメジャーモードは、 基本(fundamental)モードです。 このモードには、モードに固有な定義や変数の設定がありません。 そのため、Emacsの各コマンドはデフォルトのふるまいをし、 各オプションもデフォルトの状態です。 他のすべてのメジャーモードでは、さまざまなキーやオプションを再定義します。 たとえば、lisp対話モードでは、 C-jeval-print-last-sexp)や <TAB>(lisp-indent-line)など他のキーに対しても 特別なキーバインディングがあります。

読者の特別な編集作業を補佐するために一群の編集コマンドを書く必要がある場合、 新たなメジャーモードを作ることは一般にはよいことです。 実際、メジャーモードを書くことは (マイナモードを書くことはしばしば難しくなるが、 それに対比すれば)簡単です。

新たなモードが既存のモードに類似していても、 既存のモードを2つの目的を果たすように修正するのは 賢いことではありません。 そのようにすると、使い難く保守し難くなるからです。 そのかわりに、既存のメジャーモードの定義をコピーし名前変えてから、 コピーを変更します。 あるいは、派生モード (derived mode) (see Derived Modes)を定義します。 たとえば、emacs/lisp/rmailedit.elにあるrmail編集モードは、 テキスト(text)モードに非常によく似たメジャーモードですが、 追加コマンドが3つあります。 そのような定義がテキスト(text)モードとの違いになるのですが、 rmail編集モードはテキスト(text)モードから派生したものです。

rmail編集モードは、バッファのメジャーモードを一時的に変更して バッファを別の方法(rmailのコマンドではなく Emacsの普通のコマンド)で編集できるようにする例題です。 そのような場合、一時的なメジャーモードには、普通、 バッファの通常のモード(この場合にはrmailモード)に戻る コマンドがあります。 読者は、再帰編集の中で一時的に再定義し、 ユーザーが再帰編集を抜けるともとに戻す方法に魅了されるかもしれません。 しかし、これを複数のバッファで行うと、 再帰編集はもっとも最近に入った再帰からまず抜けるので、 ユーザーの選択に制約を課すことになり悪い方法です。 別のメジャーモードを使えばこのような制約を回避できます。 See Recursive Editing

標準のGNU Emacs Lispのライブラリのディレクトリには、 text-mode.eltexinfo.ellisp-mode.elc-mode.elrmail.elなどのファイルに いくつかのメジャーモードのコードが収めてあります。 モードの書き方を理解するためにこれらのライブラリを調べられます。 テキスト(text)モードは、基本(fundamental)モードについで、 もっとも単純なメジャーモードです。 rmailモードは複雑な特化されたモードです。