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に変換されない。