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を参照)。