Next: , Previous: , Up: キーマップ   [Contents][Index]


23.7 アクティブなキーマップ

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

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

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

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

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

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

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

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

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

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

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にたいするバインディング、そのキーマップ内で未定義ならnilをリターンする。

引数accept-defaultslookup-key(キー照合のための関数を参照)と同じようにデフォルトバインディングのチェックを制御する。

コマンドのリマップ(コマンドのリマップを参照)の際には、実際に実行されるコマンドがリターンされるように、通常だと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