メジャーモードに対するのと同じように、 マイナモードを書くうえでの慣習があります。 メジャーモードの慣習には、マイナモードにも適用されるものがあります。 つまり、モードを初期化する関数の名前、 グローバルシンボルの名前、キーマップやその他のテーブルや表の使い方です。
それらに加えて、マイナモードに固有な慣習もあります。
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)。