既成のモードをちょっとだけ変更したモードを作りたい場合は、簡単な方法が
ある。define-derived-mode
というマクロを
使うのである。C-h f で調べてみれば分かるよう
に、これは、
(define-derived-mode CHILD PARENT NAME DOCSTRING BODY) CHILD: 作りたいモード名 PARENT: 親モード名 NAME: モード行に表示するモード名の文字列 DOCSTRING: このモードの説明文字列 BODY: 本体
という書式になっている。キーマップは自動的に "モード名-map" という名前 で、親モード名のものが引き継がれる。例えば、Text mode をちょっと変更し て My Text mode を作りたい場合、
(define-derived-mode my-text-mode text-mode "My Text" "Major mode for edit article." (define-key my-text-mode-map "\C-c\C-c" 'my-text-command1) (define-key my-text-mode-map "\C-c\C-q" 'my-text-command2))
などとすれば、C-c C-c と C-c C-q のキーマップだけが変更されたモードが できる。モード名-hook は自動的に実行される。BODY の部分にはその前に実 行すべきコードを書く。これはこれで結構便利である。