Next: , Up: Programs


20.1 プログラム言語向けメジャーモード

Emacsには、Lisp、Scheme(Lispの方言の1つ)、Awk、C、C++、Fortran、 Icon、Java、Objective-C、Pascal、Perl、Pike、CORBA IDL、 Tclといった各種プログラム言語向けのメジャーモードがあります。 makefile用のメジャーモード、makefileモードもあります。 Perl向けの別のモードとして、cperlモードもあります。

理想的には、Emacsで編集する可能性のあるすべてのプログラム言語に対して、 それぞれのメジャーモードを実装すべきです。 しかし、ある言語向けのモードが、構文的に類似した他の言語にも 使えることがよくあります。 既存の言語モード群は、誰かがわざわざ書こうと決心したものです。

Lispモードにはいくつか変種がありますが、 Lispを実行する際のインターフェイス方法が異なります。 See Executing Lisp

各プログラム言語向けメジャーモードでは、 その言語の慣用的な字下げ方法を理解し 現在行をそのように字下げする関数を実行するように <TAB>キーを定義します。 たとえば、Cモードでは、<TAB>はc-indent-lineにバインドされています。 また、C-jは、<RET>に続けて<TAB>を実行するように 定義されています。 つまり、モードに固有の字下げも行います。

多くのプログラム言語では、行ごとに字下げ量が異なります。 そのため、そのような言語向けのメジャーモードでは、 (コマンドbackward-delete-char-untabifyを使って) タブ文字を等価な個数の空白と同じに扱うように<DEL>を再定義しています。 その結果、字下げが空白かタブのどちらで構成されているのか気にせずに、 1度に1桁ずつ消去することが可能となります。 そのようなモードでは、ポイントの直前にあるタブ文字を削除するには C-b C-dを使います。

プログラム言語向けモードでは、段落は空行で分割されると定義するので、 段落コマンドも便利に使えます。 プログラム言語向けメジャーモードで 自動詰め込み(auto-fill)モードがオンのときには、 新たに行を作ると自動的に字下げも行われます。

メジャーモードに入ると、モードフック(mode hook)と 呼ばれるノーマルフックが実行されます。 モードフックは、Lisp変数の値です。 各メジャーモードにはモードフックがあり、 フック名はつねにモードに入るためのコマンド名に‘-hook’を付加したものです。 たとえば、Cモードに入るとフックc-mode-hookが実行され、 Lispモードではフックlisp-mode-hookが実行されます。 See Hooks