キールックアップに関する関数と変数は以下の通りです。
この関数は、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
にメタ文字(ファンクションキーではない)が含まれている場合、その文字は暗黙的に2文字のシーケンス(meta-prefix-char
の値と、それに続く対応する非メタ文字)に置き換えられます。したがって、以下の最初の例は、2番目の例への変換によって処理されます。
(keymap-lookup (current-global-map) "M-f")
⇒ forward-word
(keymap-lookup (current-global-map) "ESC f")
⇒ forward-word
keymap 引数には nil
を指定でき、これは現在のキーマップ(current-active-maps
によって返されるもの。Active Keymaps
を参照)から key
を参照することを意味します。あるいは、キーマップまたはキーマップのリストを指定することもでき、この場合は指定されたキーマップのみから key を参照します。
read-key-sequenceとは異なり、この関数は指定されたイベントを情報が破棄されるような形で変更することはありません(キーシーケンス入力を参照)。特に、文字を小文字に変換したり、ドラッグイベントをクリックに変更したりすることはありません。
通常のコマンドループと同様に、keymap-lookup
は現在のキーマップからコマンドを参照することで、key
の参照結果となるコマンドを再マッピングします。ただし、オプションの第3引数 no-remap が
nil 以外の場合、keymap-lookup
は再マッピングを行わずにコマンドを返します。
オプション引数 position が nil
以外の場合、それは event-start および event-end によって返されるマウス位置を指定し、ルックアップは keymap ではなく、その位置に関連付けられたキーマップで行われます。position も数値またはマーカーを指定でき、その場合はバッファ位置として解釈され、関数は point
ではなくその位置にあるキーマップのプロパティを使用します。
キーマップでキーを未定義にするために使用されます。dingを呼び出しますが、エラーは発生しません。
この関数は、現在のローカルキーマップにおける key のバインディングを返し、そこで未定義の場合は
nil を返します。
引数 accept-defaults は、keymap-lookup(上記)と同様に、デフォルトバインディングのチェックを制御します。
この関数は、現在のグローバルキーマップにおけるコマンド key
のバインディングを返します。そこで未定義の場合は、nil を返します。
引数 accept-defaults は、keymap-lookup(上記)と同様に、デフォルトバインディングのチェックを制御します。
この関数は、key の有効なマイナーモードバインディングをすべて含むリストを返します。より正確には、ペア
(modename . binding) のアリストを返します。ここで modename はマイナーモードを有効にする変数であり、binding はそのモードにおける key
のバインディングです。key にマイナーモードのバインディングがない場合、値は nil となります。
最初に見つかったバインディングがプレフィックス定義(キーマップ、またはキーマップとして定義されたシンボル)でない場合、それ以降の他のマイナーモードによるバインディングは、完全にシャドウイングされるため省略されます。同様に、リストではプレフィックスバインディングに続く非プレフィックスバインディングも省略されます。
引数 accept-defaults は、keymap-lookup(上記)と同様に、デフォルトバインディングのチェックを制御します。
この変数はメタプレフィックス文字コードです。メタ文字を2文字のシーケンスに変換し、キーマップで検索できるようにするために使用されます。有用な結果を得るには、値をプレフィックスイベントにする必要があります(プレフィックスキーを参照)。デフォルト値は27で、これはESCのASCIIコードです。
As long as the value of meta-prefix-char remains
27, key lookup translates M-b into ESC b, which is normally defined as
the backward-word command. However, if you were
to set meta-prefix-char to 24, the code for C-x, then Emacs will translate M-b
into C-x b, whose standard binding is the switch-to-buffer command. (Don’t actually do
this!) Here is an illustration of what would happen:
meta-prefix-char ; The default value.
⇒ 27
(key-binding "\M-b")
⇒ backward-word
?\C-x ; The print representation ⇒ 24 ; of a character.
(setq meta-prefix-char 24)
⇒ 24
(key-binding "\M-b")
⇒ switch-to-buffer ; Now, typing M-b is
; like typing C-x b.
(setq meta-prefix-char 27) ; Avoid confusion!
⇒ 27 ; Restore the default value!
1つのイベントを2つに分割するこの変換は、文字に対してのみ行われ、その他の種類の入力イベントには適用されません。したがって、ファンクションキーであるM-F1はESC F1に変換されません。