Next: , Previous: Creating Keymaps, Up: Keymaps


21.4 継承とキーマップ

キーマップでは、親キーマップ(parent keymap)と呼ぶ別のキーマップの バインディングを継承できます。 そのようなキーマップはつぎのようになります。

     (keymap bindings... . parent-keymap)

このキーマップは、キーを探索する時点において parent-keymapが有するすべてのバインディングを継承しますが、 それらにはbindingsが追加されたり優先します。

define-keyや他のキーバインディング関数でparent-keymapの バインディングを変更すると、それらの変更は、 bindingsで隠されない限り継承側のキーマップからも見えます。 その逆は真ではありません。 define-keyで継承側のキーマップを修正すると、 それはbindingsに影響するだけでparent-keymapには影響しません。

親キーマップを用いたキーマップを作成する正しい方法は、 set-keymap-parentを使うことです。 親キーマップを用いたキーマップを直接作成するようなコードがある場合には、 set-keymap-parentを用いるようにプログラムを変更してください。

— Function: keymap-parent keymap

この関数は、キーマップkeymapの親キーマップを返す。 keymapに親がなければkeymap-parentnilを返す。

— Function: set-keymap-parent keymap parent

キーマップkeymapの親キーマップとしてparentを設定し、 parentを返す。 parentnilであると、 この関数はkeymapに親キーマップをいっさい与えない。

keymapに(プレフィックスキー用のバインディングである) サブマップがあれば、それらもparentが指定するプレフィックスキーを 反映する新たな親マップを受け取る。

text-mode-mapからキーマップを継承する方法を示します。

     (let ((map (make-sparse-keymap)))
       (set-keymap-parent map text-mode-map)
       map)