Emacsには,Lisp,Scheme(Lispの一種),C,Fortran,Muddleなどのプログラ ム言語用の主モードもあります.理想的には,あなたがEmacsで編集するどのプ ログラム言語にも主モードを作るのが良いのですが,ある言語用のモードが,別 の似た構文を持つ言語に使えることもあります.今ある言語モードはどれも誰か が努力して書いたものです.
Lispモードにはいくつかの形式があります.それらはLispを実行するときのイ ンタフェースが異なっています.See section Lisp用の主モード.
プログラム言語モードは,どれもTABキーを字下げ関数を実行するよう
に定義します.この関数はその言語の字下げの慣習を知っていて,それに応じて
現在行を字下げします.たとえばCモードではTABキーを,
c-indent-line
に割り当てます.LFDは,通常RETと
TABを順に実行するように定義されています.よってこれもモードで指定
された字下げをします.
たいていのプログラム言語では,字下げは行ごとに変わります.このような言
語のための主モードではDELをタブ文字を同数の空白として扱うように再
割当します(backward-delete-char-untabify
に割り当てます).これによ
り,字下げが空白か,またはタブがはいっているのかを考えずに1桁ずつ消して
いけます.このモードで,ポイントの前にあるタブ文字を消すには,C-b
C-dと入力します.
プログラム言語モードでは段落の区切りは空白行だけになります.これによっ て段落コマンドが生かせます.プログラム言語用主モードでAuto Fillモードが 使われると,自動的に作られた新しい行は字下げされます.
主モードを設定したとき,モードフックという利用者関数が呼び出されます.
これはLisp変数の値です.たとえば,Cモードの場合,変数c-mode-hook
の値が呼び出されます.ただこれは,この値が存在しnon-nil
のときです.
他のプログラム言語モードのモードフック変数には,
lisp-mode-hook
,emacs-lisp-mode-hook
,
lisp-interaction-mode-hook
,scheme-mode-hook
,
muddle-mode-hook
があります.モードフック関数には引数はありません.