Next: キーバインディングの変更, Previous: キーの照合, Up: キーマップ [Contents][Index]
以下はキールックアップに関連する関数および変数です。
この関数はkeymap内のkeyの定義をリターンする。このチャプターで説明されているキーをルックアップする他のすべての関数がkeymap-lookupを使用する。以下は例:
(keymap-lookup (current-global-map) "C-x C-f")
⇒ find-file
(keymap-lookup (current-global-map) "C-x C-f 1 2 3 4 5")
⇒ 2
文字列かベクターのkeyがkeymap内で指定されるプレフィクスキーとして有効なキーシーケンスでなければ、それは最後に余計なイベントをもった、単一のキーシーケンスに適合しない長過ぎるキーのはずである。その場合のリターン値は数となり、この数はコンプリートキーを構成するkeyの前にあるイベントの数である。
accept-defaultsが非nilなら、keymap-lookupはkey内の特定のイベントにたいするバインディングと同様にデフォルトバインディングも考慮する。それ以外ではkeymap-lookupは特定のkeyのシーケンスにたいするバインディングだけを報告して、明示的に指定したとき以外はデフォルトバインディングを無視する(これを行うにはkeyの要素としてtを与える。キーマップのフォーマットを参照)。
keyがメタ文字(ファンクションキーではない)を含むなら、その文字は暗黙にmeta-prefix-charの値と対応する非メタ文字からなる2文字シーケンスに置き換えられる。したがって以下の1つ目の例は2つ目の例に変換されて処理される。
(keymap-lookup (current-global-map) "M-f")
⇒ forward-word
(keymap-lookup (current-global-map) "ESC f")
⇒ forward-word
keymap引数はnilでもよい。これはカレントキーマップ(current-active-mapsによってリターンされるキーマップ;
アクティブなキーマップを参照)でkeyを探すことを意味する。またはキーマップやキーマップのリストでもよく、この場合には指定されたキーマップからのみキーを探すことを意味する。
read-key-sequenceとは異なり、この関数は指定されたイベントの情報を破棄する変更(キーシーケンス入力を参照)を行わない。特にこの関数はアルファベット文字を小文字に変更せず、ドラッグイベントをクリックイベントに変更しない。
keymap-lookupは通常のコマンドループが行うように、カレントキーマップ内のコマンドを調べることによってkeyを見つけ出し、その結果によってコマンドのリマップを行う。ただしオプションの第3引数no-remapが非nilなら。keymap-lookupはリマップをせずにそのコマンドをリターンする。
オプション引数positionが非nilなら、それはevent-startやevent-endがリターンするようなマウス位置を指定する。そしてルックアップはkeymapではなく、その位置に関連付けられているキーマップにたいして行われる。positionは数値かマーカーでもよく、その場合にはバッファー位置として解釈されて、この関数はポイント位置ではなく指定した位置のキーマッププロパティを使用する。
キーを未定義にするためにキーマップ内で使用される。これはdingを呼び出すがエラーを発生ささない。
この関数はカレントのローカルキーマップ内のkeyにたいするバインディングをリターンする。カレントのローカルキーマップ内で未定義ならnilをリターンする。
引数accept-defaultsはkeymap-lookup(上記)と同じようにデフォルトバインディングのチェックを制御する。
この関数はカレントのグローバルキーマップ内でコマンドkeyにたいするバインディングをリターンする。カレントのグローバルキーマップ内で未定義ならnilをリターンする。
引数accept-defaultsはkeymap-lookup(上記)と同じようにデフォルトバインディングのチェックを制御する。
この関数はアクティブなマイナーモードのkeyのバインディングをリストでリターンする。より正確にはこの関数は(modename
.
binding)のようなペアのalistをリターンする。ここでmodenameなそのマイナーモードを有効にする変数、bindingはそのモードでのkeyのバインディングである。keyがマイナーモードバインディングをもたなければ値はnil。
最初に見つかったバインディングがプレフィクス定義(キーマップ、またはキーマップとして定義されたシンボル)でなければ、他のマイナーモードに由来するすべての後続するバインディングは完全にshadowされて省略される。同様にこのリストはプレフィクスバインディングに後続する非プレフィクスバインディングは省略される。
引数accept-defaultsはkeymap-lookup(上記)と同じようにデフォルトバインディングのチェックを制御する。
この変数はメタ/プレフィクス文字コードである。これはメタ文字をキーマップ内でルックアップできるように2文字シーケンスに変換する。有用な結果を得るために値はプレフィクスイベント(プレフィクスキーを参照)であること。デフォルト値は27で、これはESCにたいするASCIIコード。
meta-prefix-charの値が27であるような限り、キールックアップは通常はbackward-wordコマンドとして定義されるM-bをESC
bに変換する。しかしmeta-prefix-charを24(C-xのコード)にセットすると、EmacsはM-bをC-x
bに変換するだろうが、これの標準のバインディングはswitch-to-bufferコマンドである。以下に何が起こるかを示す(実際にこれを行ってはならない!):
meta-prefix-char ; デフォルト値
⇒ 27
(key-binding "\M-b")
⇒ backward-word
?\C-x ; 文字.の ⇒ 24 ; プリント表現
(setq meta-prefix-char 24)
⇒ 24
(key-binding "\M-b")
⇒ switch-to-buffer ; 今やM-bをタイプすると
; C-x bをタイプしたようになる
(setq meta-prefix-char 27) ; 混乱を避けよう!
⇒ 27 ; デフォルト値をリストア!
この単一イベントから2イベントへの変換は文字にたいしてのみ発生し、他の種類の入力イベントには発生しない。したがってファンクションキーM-F1はESC F1に変換されない。