Emacsのキーマップlookup順序について
元記事のアーカイブのアーカイブ。なにか問題があれば教えて下さい。以下、アーカイブ。
何となく忘れてしまうのでメモ。
Infoの22.8 Searching the Active Keymaps, 22.9 Controlling the Active Keymapsなどから。
「belong」は誰がその変数を管理するかとか、変数の所属先という感じ。
基本
全バッファ共通は global-map 、メジャーモードは local-map を設定する。
マイナーモードはまとめて minor-mode-map-alist に入っていて、マイナーモードの変数が on か off で有効無効が決まる。このリストの順番も重要。
テキストには文字単位でkeymapと言う属性をつけて、キーバインドを設定できる。
あと、これらのどれにもヒットしなければ、 local-function-key-map でキーの変換が行われる。例えば、環境によって C-i (タブ文字) と <tab> は区別されているが、実質は同じと見なした方が便利なのでここで変換される。
優先順位は見たまま。 text-property 'keymap > minor-mode-map-alist > local-map > global-map > local-function-key-map
override
この優先順位を少し覆すことが出来るしくみがoverriding関係。CSSの important! のような感じ。
まず、メジャーモードよりマイナーモードの方が優先されてしまうので、これを覆す仕組みが minor-mode-overriding-map-alist 。ただ、覆そうとしているマイナーモードの名前を知らないといけない。
次に、文字単位のkeymapをメジャーモードやマイナーモードから覆す仕組みが overriding-local-map 。
最後に、端末入力の最上位で入力を乗っ取る仕組みが overriding-terminal-local-map 。これは影響範囲がその端末だけ。
emulation-mode-map-alists は他のメジャーモードやマイナーモードが別のモードのキーマップを乗っ取ったり、 remap で挙動を変えたりする場合に使うもの。検索してもあまり情報がない (cua, viperとかぐらい)。
