元記事のアーカイブのアーカイブ。なにか問題があれば教えて下さい。以下、アーカイブ。
何となく忘れてしまうのでメモ。
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 とかぐらい)。