Emacs キー定義の問題として,一貫性の無さがあった。色々なモードがキー定義を恣意的に定義しているので混乱する。これを解決しようと,まず Emacs 全体でキー定義を共有・強制し,各モードに特化した定義を適宜追加していく,という方法を採った。いま思えば,理想的ではなかったが一番マシだったなと。
Emacs キー定義の問題として,一貫性の無さがあった。色々なモードがキー定義を恣意的に定義しているので混乱する。これを解決しようと,まず Emacs 全体でキー定義を共有・強制し,各モードに特化した定義を適宜追加していく,という方法を採った。いま思えば,理想的ではなかったが一番マシだったなと。
knu.el
}{kno
}{knu-kno.el}{虎哲*ウシ}{小模動}{マイナー モード}{Emacs モード}(8)知番を扱うためのマイナー モード。様々な実装を検討してきたが,希哲11年3月27日,手始めに最小限のマイナー モードとしての実装を試み始める。希哲11年7月4日,knu.el に含むことにした。
テキスト上の知番の描題化と
make-keymap 関数 を使う方法。リスト形式が簡潔で,大量のキーを定義するのに向く。
例:
>=plain
>(defvar example-mode-map
> (let (keys (make-keymap))
> (define-key keys "\C-c\C-a" 'function-a)
> (define-key keys "\C-c\C-b" 'function-b)
> keys))
<
make-sparse-keymap 関数を使う方法。グローバルマップを引き継ぎ少量のキーを定義するのに向く。
例:
>=plain
>(defvar example-mode-map
> (let (keys (make-sparse-keymap))
> (define-key keys "\C-c\C-a" 'function-a)
> (define-key keys "\C-c\C-b" 'function-b)
> keys))
<
キーを定義したら,モード本体で (use-local-map *-mode-map) する。
グローバルマップに対し,マイナーモードが優先順位順に優先される。
マイナーモードの優先順位は minor-mode-map-alist で決まる。
example-mode を常に minor-mode-map-alist の頂点におく例:
>=plain
> (setq minor-mode-map-alist
> (delete (assq 'example-mode minor-mode-map-alist)
> minor-mode-map-alist)
> minor-mode-map-alist
> (cons (cons 'example-mode example-mode-map) minor-mode-map-alist))
<
use-local-map 関数の前に置くこと。これの後に置くと有効にならない。