Next: , Previous: , Up: Keymaps   [Contents][Index]


21.7 Active Keymaps

Emacsは多くのキーマップを含んでいますが、常にいくつかのキーマップだけがアクティブです。Emacsがユーザー入力を受け取ったとき、それは入力イベントに変換されて(Translation Keymapsを参照)、アクティブなキーマップ内でキーバインディングが照合されます。

アクティブなキーマップは通常、(1) keymapプロパティにより指定されるキーマップ、(2) 有効なマイナーモードのキーマップ、(3) カレントバッファーのローカルキーマップ、(4) グローバルキーマップの順です。Emacsは入力キーシーケンスそれぞれにたいして、これらすべてのキーマップ内を検索します。

これらの“通常”のキーマップのうち最優先されるのは、もしあればポイント位置のkeymapテキストにより指定されるキーマップ、またはoverallプロパティです。(マウス入力イベントにたいしては、Emacsはポイント位置のかわりにイベント位置を使用する。 Searching Keymapsを参照のこと。)

次に優先されるのは、有効なマイナーモードにより指定されるキーマップです。もしあれば、これらのキーマップは変数emulation-mode-map-alistsminor-mode-overriding-map-alistminor-mode-map-alistにより指定されます。Controlling Active Mapsを参照してください。

次に優先されるのは、バッファーのローカルキーマップ(local keymap)で、これにはそのバッファー特有なキーバインディングが含まれます。ミニバッファーもローカルキーマップをもちます(Intro to Minibuffersを参照)。ポイント位置にlocal-mapテキスト、またはoverlayプロパティがある場合、それはバッファーのデフォルトローカルキーマップのかわりに使用するローカルキーマップを指定します。

ローカルキーマップは通常はそのバッファーのメジャーモードによりセットされます。同じメジャーモードをもつすべてのバッファーは、同じローカルキーマップを共有します。したがって、あるバッファーでローカルキーマップを変更するためにlocal-set-key(Key Binding Commandsを参照)を呼び出した場合、それは同じメジャーモードをもつ他のバッファーのローカルキーマップにも影響を与えます。

最後は、C-fのようなカレントバッファーとは関係なく定義されるキーバインディングを含む、グローバルキーマップ(global keymap)です。kこのキーマップは常にアクティブであり、変数global-mapにバインドされています。

これら“通常”のキーマップとは別に、Emacsはプログラムが他のキーマップをアクティブにするための特別な手段を提供します。1つ目は、グローバルキーマップ以外の通常アクティブなキーマップを置き換えるキーマップを指定する変数overriding-local-mapです。2つ目は、他のすべてのキーマップより優先されるキーマップを指定する、端末ローカル変数overriding-terminal-local-mapです。この端末ローカル変数は通常、modal(訳注: 他のキーマップを選択できない状態)かつ一時的なキーバインディングに使用されます(ここの変数にたいして関数set-transient-mapは便利なインターフェイスを提供する)。詳細は、Controlling Active Mapsを参照のこと。

これらを使用するのがキーマップをアクティブにする唯一の方法ではありません。キーマップは、read-key-sequenceによるイベントの変換のような、他の用途にも使用されます。Translation Keymapsを参照してください。

いくつかの標準的なキーマップのリストは、Standard Keymapsを参照してください。

Function: current-active-maps &optional olp position

これは、カレントの状況下でコマンドループによりキーシーケンスをルックアップするために使用される、アクティブなキーマップのリストをリターンする。これは通常、overriding-local-mapoverriding-terminal-local-mapを無視するが、olpが非nilの場合には、それらのキーマップにも注意を払う。オプションでpositionevent-startによりリターンされるイベント位置、またはバッファー位置を指定でき、key-bindingで説明されているようにキーマップを変更するかもしれない。

Function: key-binding key &optional accept-defaults no-remap position

この関数は、カレントのアクティブキーマップでkeyにたいするバインディングをリターンする。そのキーマップ内でkeyが未定義の場合、結果はnilになる。

引数accept-defaultsは、lookup-key(Functions for Key Lookupを参照)のようにデフォルトバインディングをチェックするかを制御する。

コマンドがリマップ(remap: 再マップ。Remapping Commandsを参照)されたとき、key-bindingは通常、実際に実行されるであろうリマップされたコマンドをリターンするように、コマンドのリマップを行う。しかし、no-remapが非nilの場合、key-bindingはリマップを無視して、keyにたいして直接指定されたバインディングをリターンする。

keyがマウスイベント(もしかしたらプレフィクスイベントが先行するかもしれない)で始まる場合、照合されるマップはそのイベントの位置を元に決定される。それ以外では、それらのマップはポイント値に基づき決定される。しかし、positionを指定することにより、これらをオーバーライドできる。positionが非nilの場合、それはバッファー位置かevent-startの値のようなイベント位置のいずれかである。その場合、照合されるマップはpositionに基づき決定される。

keyが文字列とベクターのいずれでもない場合、Emacsはエラーをシグナルする。

(key-binding "\C-x\C-f")
    ⇒ find-file