Next: Active Keymaps, Previous: Inheritance and Keymaps, Up: Keymaps [Contents][Index]
プレフィクスキー(prefix
key)とは、バインディングがキーマップであるようなキーシーケンスです。このキーマップは、プレフィクスキーを拡張するキーシーケンスが何を行うか定義します。たとえば、C-xはプレフィクスキーであり、これはキーマップを使用し、そのキーマップは変数ctl-x-map
にも格納されています。このキーマップはC-xで始まるキーシーケンスにたいするバインディングを定義します。
標準的なEmacsのプレフィクスキーのいくつかは、Lisp変数でも見い出すことができるキーマップを使用していますl:
esc-map
は、プレフィクスキーESCにたいするグローバルキーマップである。したがって、すべてのメタ文字にたいする定義は、このキーマップで見つけることができる。このマップは、ESC-prefix
の関数定義でもある。
help-map
は、プレフィクスキーC-hにたいするグローバルキーマップである。
mode-specific-map
は、プレフィクスキーC-cにたいするグローバルキーマップである。このマップは実際にはモード特有(mode-specific)ではなくグローバルであるが、このプレフィクスキーは主にモード特有なバインディングに使用されるので、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にたいして使用されるグローバルキーマップである。
goto-map
は、プレフィクスキーM-gにたいして使用されるグローバルキーマップである。
search-map
は、プレフィクスキーM-sにたいして使用されるグローバルキーマップである。
facemenu-keymap
は、プレフィクスキーM-oにたいして使用されるグローバルキーマップである。
プレフィクスキーのキーマップバインディングは、プレフィクスキーに続くイベントをルックアップするために使用されます。(これは、関数定義がキーマップであるようなシンボルかもしれません。効果は同じですが、シンボルはプレフィクスキーにたいする名前の役割を果たします。)
したがって、C-xのバインディングはシンボルControl-X-prefix
であり、このシンボルの関数セルがC-xコマンドにたいするキーマップを保持します(ctl-x-map
の値も同じキーマップです)。
プレフィクスキー定義は、任意のアクティブなキーマップ内に置くことができます。プレフィクスキーとしてのC-c、C-x、C-h、ESCの定義はグローバルマップ内にもあるので、これらのプレフィクスキーは常に使用できます。メジャーモードとマイナーモードは、ローカルマップやマイナーモードのマップ内にプレフィクスキー定義を置くことにより、キーをプレフィクスキーとして再定義できます。 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
この関数は、プレフィクスキーのバインディングとして使用するために、symbolを用意する。これはsparseキーマップを作成して、それをsymbolの関数定義として格納する。その後はsymbolにキーシーケンスをバインディングすると、そのキーシーケンスはプレフィクスキーになるだろう。リターン値はsymbol
である。
この関数は、値がそのキーマップであるような変数としてもsymbolをセットする。しかしmapvarが非nil
の場合は、かわりにmapvarを変数としてセットする。
promptが非nil
の場合、これはそのキーマップにたいするoverallプロンプト文字列になる。プロンプト文字列はメニューキーマップにたいして与えられるべきである(Defining Menusを参照)。