次: 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 ; デフォルト値に戻す!