次: Changing Key Bindings, 前: Key Lookup, 上: Keymaps
ここでは、キー探索に関わる関数や変数について述べます。
この関数はキーマップkeymapにおけるkeyの定義を返す。 本章で述べる他の関数は、
lookup-key
を用いてキーを探す。 例を示す。(lookup-key (current-global-map) "\C-x\C-f") => find-file (lookup-key (current-global-map) "\C-x\C-f12345") => 2文字列やベクトルであるkeyが、 keymapで指定されたプレフィックスキーに対して正しいキー列でなければ、 keyは『長すぎる』のであって、 1つのキー列に収まらない余分なイベントが末尾にある。 その場合、戻り値は数であり、 完全なキーを構成するkeyの先頭からのイベント数を表す。
accept-defaultsが
nil
以外であると、lookup-key
は、keyの特定のイベントに 対するバインディングだけでなく、 デフォルトのバインディングも考慮する。 さもなければ、lookup-key
は、 keyの特定のイベントに対するバインディングだけを報告し、 特に指定しない限りデフォルトのバインディングは無視する。 (それには、keyの要素としてt
を与える。 Format of Keymapsを参照。)keyにメタ文字が含まれる場合、 当該文字は暗黙のうちに2文字の列、 つまり、
meta-prefix-char
の値と対応する非メタ文字 に置き換えられる。 したがって、つぎの最初の例は、2番目の例に変換して処理される。(lookup-key (current-global-map) "\M-f") => forward-word (lookup-key (current-global-map) "\ef") => forward-word
read-key-sequence
と異なり、 この関数は、情報を欠落するようには指定されたイベントを修正しない (see Key Sequence Input)。 特に、文字を小文字に変換したり、 ドラッグイベントをクリックイベントに変換したりはしない。
この関数は、すべての活性なキーマップを試して keyに対するバインディングを返す。 キーマップでkeyが未定義であると結果は
nil
。引数accept-defaultsは、
lookup-key
(上記)と同様に、 デフォルトのバインディングを調べるかどうか制御する。keyが文字列でもベクトルでもないとエラーを通知する。
(key-binding "\C-x\C-f") => find-file
この関数は、現在のローカルキーマップから keyに対するバインディングを返す。 未定義ならば
nil
を返す。引数accept-defaultsは、
lookup-key
(上記)と同様に、 デフォルトのバインディングを調べるかどうか制御する。
この関数は、現在のグローバルキーマップから keyに対するバインディングを返す。 未定義ならば
nil
を返す。引数accept-defaultsは、
lookup-key
(上記)と同様に、 デフォルトのバインディングを調べるかどうか制御する。
この関数は、すべてのオンになっているマイナモードにおける keyのバインディングのリストを返す。 より正確には、対
(
modename.
binding)
を要素とする 連想リストを返す。 ここで、modenameはマイナモードをオンにする変数であり、 bindingは当該モードにおけるkeyのバインディングである。 keyにマイナモードでのバインディングがなければ、 値はnil
である。最初にみつかったバインディングがプレフィックスの定義 (キーマップかキーマップとしてのシンボル)でなければ、 残りのマイナモードからのバインディングは完全に隠されてしまうので それらは省略する。 同様に、プレフィックスバインディングに 続く非プレフィックスバインディングも省略する。
引数accept-defaultsは、
lookup-key
(上記)と同様に、 デフォルトのバインディングを調べるかどうか制御する。
この変数は、メタプレフィックス文字の文字コードである。 メタ文字をキーマップで探索するために2文字列に変換するときに使われる。 結果が有用であるためには、 この値はプレフィックスイベント(see Prefix Keys)であるべきである。 デフォルト値は27、<ESC>のASCIIコードである。
meta-prefix-char
の値が27である限り、 キー探索ではM-bを<ESC> bに変換し、 通常、これはコマンドbackward-word
と定義されている。 しかし、meta-prefix-char
にC-xのコードである24を設定すると、 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 ; デフォルト値に戻す!