次: Keymaps and Minor Modes, 前: Minor Modes, 上: Minor Modes
メジャーモードに対するのと同じように、 マイナモードを書くうえでの慣習があります。 メジャーモードの慣習には、マイナモードにも適用されるものがあります。 つまり、モードを初期化する関数の名前、 グローバルシンボルの名前、キーマップやその他のテーブルや表の使い方です。
それらに加えて、マイナモードに固有な慣習もあります。
nil、オンにするにはそれ以外に)設定
すること。
可能ならば、変数に設定すると 自動的にモードがオン/オフされるようにモードを実装する。 そうすると、マイナモードコマンドは、 変数に設定する以外にはなにもしないでよくなる。
この変数は、モード行にマイナモード名を表示するために
minor-mode-alistでも使われる。
マイナモードキーマップを活性にしたり非活性にしたりもする。
各コマンドやフックもこの変数の値を検査する。
各バッファごとに別々にマイナモードをオンにしたい場合には、 この変数をバッファローカルにする。
当該コマンドは、省略可能な引数を1つ受け取ること。
引数がnilであればモードをトグル
(オンであればオフに、オフであればオンに)する。
さもなければ、引数が、正整数、nil以外のシンボル、
-、あるいは、carがそのような整数やシンボルであるようなリストの
場合にはモードをオンにする。
それ以外ではモードをオフにする。
transient-mark-modeの定義から引用した例を示す。
モードのふるまいをオン/オフする変数としての
transient-mark-modeの使い方、
および、生の前置引数に基づいたマイナモードの
オン/オフ/トグルの仕方を示す。
(setq transient-mark-mode
(if (null arg) (not transient-mark-mode)
(> (prefix-numeric-value arg) 0)))
minor-mode-alistに追加する
(see Mode Line Variables)。
この要素はつぎの形のリストであること。
(mode-variable string)
ここで、mode-variableはマイナモードのオン/オフを制御する変数であり、 stringはモード行でモードを表す短い空白で始まる文字列である。 同時に複数のモードを表示できるように、これらの文字列は短いこと。
minor-mode-alistに要素を追加するときには、
重複を防ぐために既存の要素を検査するassqを使うこと。
たとえばつぎのとおり。
(or (assq 'leif-mode minor-mode-alist)
(setq minor-mode-alist
(cons '(leif-mode " Leif") minor-mode-alist)))
このリストに要素を1回だけ追加するならばadd-to-listも使えます
(see Setting Variables)。