次: Active Keymaps, 前: Inheritance and Keymaps, 上: Keymaps
プレフィックス(prefix key)とは、
そのバインディングがキーマップであるキー列のことです。
そのキーマップが、プレフィックスキー以降のキーでなにをするかを定義します。
たとえば、C-xはプレフィックスキーであり、
変数ctl-x-map
に保持されたキーマップを使います。
このキーマップは、C-xで始まるキー列に対するバインディングを定義します。
Emacsの標準プレフィックスキーのなかには、 Lisp変数にも保持されたキーマップを使うものがあります。
esc-map
は、プレフィックスキー<ESC>用のグローバルマップである。
したがって、すべてのメタ文字のグローバルな定義はここにある。
このキーマップはESC-prefix
の関数定義でもある。
help-map
は、プレフィックスキーC-hに対する
グローバルキーマップである。
mode-specific-map
は、プレフィックスキーC-cに対する
グローバルキーマップである。
このキーマップは実際にはグローバルでありモード固有ではないが、
その名前は、C-h b(display-bindings
)の出力において
C-cに関する有用な情報を与える。
というのは、このプレフィックスキーの主な用途は、
モード固有のバインディングのためだからである。
ctl-x-map
は、プレフィックスキーC-xに対して使われる
グローバルキーマップである。
このキーマップは、シンボルControl-X-prefix
の関数セルに現れる。
mule-keymap
は、プレフィックスキーC-x <RET>に対して使われる
グローバルキーマップである。
ctl-x-4-map
は、プレフィックスキーC-x 4に対して使われる
グローバルキーマップである。
ctl-x-5-map
は、プレフィックスキーC-x 5に対して使われる
グローバルキーマップである。
2C-mode-map
は、プレフィックスキーC-x 6に対して使われる
グローバルキーマップである。
vc-prefix-map
は、プレフィックスキーC-x vに対して使われる
グローバルキーマップである。
facemenu-keymap
は、プレフィックスキーM-gに対して使われる
グローバルキーマップである。
プレフィックスキーのキーマップバインディングは、
当該プレフィックスキーに続くイベントを探すために使われます。
(その関数定義がキーマップであるシンボルでもよい。
効果は同じであるが、シンボルはプレフィックスキーに対する名前として働く。)
したがって、C-xのバインディングは
シンボルControl-X-prefix
であり、
その関数セルがコマンドC-x用のキーマップを保持している。
(ctl-x-map
の値も同じキーマップである。)
プレフィックスキーの定義は、任意の活性なキーマップにあってかまいません。 プレフィックスキーとしてのC-c、C-x、C-h、<ESC>の 定義はグローバルマップにあるので、これらのプレフィックスキーは つねに利用できます。 メジャーモードやマイナモードでは、 プレフィックスキーの定義をローカルキーマップや マイナモードキーマップに入れることで、 キーをプレフィックスとして再定義できます。 See Active Keymaps。
複数の活性なキーマップにおいて、キーがプレフィックスと定義されていると、 さまざまな定義は実質的には併合されます。 マイナモードキーマップで定義されたコマンドが最優先で、 つぎにローカルマップのプレフィックス定義、 そしてグローバルマップのプレフィックス定義が続きます。
以下の例では、ローカルキーマップにおいて、
C-pをC-xに等価なプレフィックスキーにします。
続いてC-p C-fのバインディングを
C-x C-fのように関数find-file
にします。
キー列C-p 6はどの活性なキーマップでもみつかりません。
(use-local-map (make-sparse-keymap)) => nil (local-set-key "\C-p" ctl-x-map) => nil (key-binding "\C-p\C-f") => find-file (key-binding "\C-p6") => nil