Emacs は状況に応じて編集しやすいように適切に変化する。その動作の仕方を 決めているのがモード (mode) である。例えば長文のテキストを書く場合は text mode, 整形されたテキストを書く時には indented text mode, C のプロ グラムを書く場合には c mode, Perl のスクリプトを書く場合には cperl mode, などといった具合である。ちょっと調べれば、数え切れないぐらいのモードが 存在することが分かると思う。 (→ 様々なモード)
モードには
の二つがある。上に挙げたモードは全て主モードである。一方、副モードは、 共通して使うことの多い機能を実現するのに使われる。主モードが一つのバッ ファに対して同時に一つしか設定できないのに対し、副モードはそれぞれを主 モードとも他の副モードとも独立して併用することができる。文章を自動的に 折り返す auto-fill-mode や、overwrite mode, 仮名漢字変換の SKK 等が 代表的な副モードである。他にどんな副モードがあるかは、やはり 様々なモード を参照。
普通に Emacs を起動すると、下から2行目が反転している。これがモードライ ンと呼ばれるもので、Window を分割すれば分かるように、各バッファに一つ ずつ付いている。
*scratch*
がバッファの名前で、( ) で括られて
いる部分 (今の場合は Lisp Interaction) が現在のモードを表している。因
みに、Lisp Interaction は名前の通り Lisp 対話モードで、ここに Lisp の
コードを打ち込んで評価させたりするのに使われる。
(→ 評価の例)
副モードが起動されていれば、それも表示されたりする。例えば、Text mode
で auto fill mode が起動されていれば、(Text Fill) のように表示されてい
るはずだ。ついでながら、Text mode の際に常に auto-fill-mode を起動する
には、.emacs
に
(setq text-mode-hook 'turn-on-auto-fill)
と書いておけばよい。この場合 Indented Text mode や YaTeX mode でも auto fill mode が起動する。これは、これらの mode の起動時にも text-mode-hook が実行されるためである。
(describe-mode)
で見ることができる。因み
に現在のキーバインドは F1-b
(describe-bindings)
.
ファイルの種類とモードの対応は、基本的には auto-mode-alist という変数で決めている。これはファイル名と対応する mode 連想リストで、 あらかじめ、かなりの対応が定められている。
これをカスタマイズするには、例えば次のようにして、 auto-mode-alist の最初の方に対応する連想リストを追加する。
(setq auto-mode-alist (append '(("\\.tex$" . yatex-mode) ("\\.txt$" . indented-text-mode) ("nifty.[a-z]*$" . xcscript-mode) ("jyusyo\\.sgm$" . ramdb-mode) ("pad[0-9]$" . nifty-post-mode) ("\\.html$" . yahtml-mode) ("\\.rb$" . ruby-mode) ("lib[0-9][0-9]$" . qlog-library-mode) ("/lib$" . qlog-library-forum-mode) ("\\.pov$" . pov-mode)) auto-mode-alist))
見れば分かるように、ペアの第1成分にはファイル名の正規表現、第2成分には
対応するモードが入る。Emacs の正規表現については、ここでは詳しく説明し
ないけれど、Lisp により正規表現が一度解釈されるために、\
を再度エスケープする必要があることは注意しておく。例えばピリオドに続い
て tex で終了するファイル名にマッチする正規表現 \.tex
を
Emacs Lisp で記述するためには上のように
"\\.tex"
と書く必要があるわけである。より詳しく
は、Emacs Lisp の Info を見ましょう。インストールしてない人は、
電総研の FTP サイト
などから取って来れると思います。