define-minor-mode

w3m-session の改造を考え中。 まずは define-minor-mode の調査から。

describe-function の適当な和訳

define-minor-mode は `easy-mmode.el' で定義されている Lisp マクロ

(define-minor-mode MODE DOC &optional INIT-VALUE LIGHTER KEYMAP &rest
BODY)

MODE という新しいマイナーモードを定義する。この関数は制御変数 MODE キー
マップ MODE-map トグルコマンド MODE を定義する。

DOC はモードをトグルするコマンドのドキュメント。
INIT-VALUE はモードの変数の初期値。 (オプション)
LIGHTER はモードが ON の時に modeline に表示される。 (オプション)
KEYMAP はモードの keymap になるデフォルトの keymap (defvar と同じ動き)
  リストであれば、 `easy-mmode-define-keymap' にわたされ、正しい keymap が構築される。
  一般にはこれを使うよりは MODE-map を別に定義するほうがよい。
キーワド引数が使われると上の3つの引数はスキップされる。 (後述)

BODY はモードの ON/OFF が切り替わるたびに実行されるコード。
  これはモードが切り替えら、 MODE-hook のフックが実行された後に実行される。
  実際のコードを書く前に、 キーワード引数(キーワードと値を交互に書く)を書くことができる。
  以下のキーワード引数を使うことができる。 (マイナーモードがグローバルならば、 
  他のキーワードは `defcustom' にわたされる)
:group GROUP   `defcustom' で使われる。カスタムグループの名前。
               よくある末尾、 "-mode" を除いた MODE がデフォルトである。
               グループを明確にしめす `defgroup' を使っていないのならば、
               このデフォルトの名前は使わないこと。
:global GLOBAL non-nil ならばマイナーモードが buffer-local でなくなり変数 MODE を buffer-local にしない。
               デフォルトではモードは buffer-local になる。
:init-value    引数 INIT-VALUE に同じ。
:lighter SPEC  引数 LIGHTER に同じ。
:keymap MAP    引数 KEYMAP に同じ。
:require SYM   `defcustom' のものと同じ。

たとえば、このように書ける。
  (define-minor-mode foo-mode "If enabled, foo on you!"
    :lighter " Foo" :require 'foo :global t :group 'hassle :version "27.5"
    ...BODY CODE...)

あまり英語が減ったように見えない。