本節では、ヘルプ情報を表示するために 現在のキーマップをすべて走査する関数について述べます。
この関数は、keymapから(0個以上のプレフィックスキーにより)辿れる すべてのキーマップのリストを返す。 その値は、
(
key.
map)
の形の要素から成る 連想リストである。 ここで、keyはプレフィックスキーであり、 keymap内でのその定義はmapである。連想リスト内での要素の順番は、keyの長さが増える順である。 指定したキーマップkeymapはプレフィックスのイベントなしに参照できるので、 最初の要素はつねに
("" .
keymap)
である。prefixを与える場合、それはプレフィックスキー列であること。 すると、
accessible-keymaps
は、 prefixで始まるプレフィックスに対応したサブマップのみを含める。 それらの要素は、(accessible-keymaps)
の値と同じに見えるが、 違いは、いくつかの要素が省略されることである。つぎの例では、返された連想リストにおいては、 ‘^[’と表示されたキー<ESC>はプレフィックスキーであり、 その定義は疎なキーマップ
(keymap (83 . center-paragraph) (115 . foo))
であることを表す。(accessible-keymaps (current-local-map)) ⇒(("" keymap (27 keymap ; Note this keymap for <ESC> is repeated below. (83 . center-paragraph) (115 . center-line)) (9 . tab-to-tab-stop)) ("^[" keymap (83 . center-paragraph) (115 . foo)))
つぎの例では、C-hは、 疎なキーマップ
(keymap (118 . describe-variable)...)
を 使うプレフィックスキーである。 別のプレフィックスC-x 4は、 変数ctl-x-4-map
の値でもあるキーマップを使う。 イベントmode-line
は、 ウィンドウの特別な箇所におけるマウス操作を表すための 疑似イベントの1つである。(accessible-keymaps (current-global-map)) ⇒ (("" keymap [set-mark-command beginning-of-line ... delete-backward-char]) ("^H" keymap (118 . describe-variable) ... (8 . help-for-help)) ("^X" keymap [x-flush-mouse-queue ... backward-kill-sentence]) ("^[" keymap [mark-sexp backward-sexp ... backward-kill-word]) ("^X4" keymap (15 . display-buffer) ...) ([mode-line] keymap (S-mouse-2 . mouse-split-window-horizontally) ...))実際に表示されるキーマップはこれらだけとは限らない。
この関数は、コマンド
where-is
(see ヘルプ機能)が使う サブルーティンである。 キーマップにおいてcommandにバインドされた (任意長の)キー列のリストを返す。引数commandは任意のオブジェクトであり、 キーマップ項目とは
eq
で比較する。keymapが
nil
であると、overriding-local-map
を無視 (つまり、その値はnil
とみな)して、 現在活性なキーマップを使う。 keymapがnil
以外であると、 keymapとグローバルキーマップから辿れるキーマップを使う。通常、keymapに対する式には
overriding-local-map
を使うのが 最良である。 そうすると、where-is-internal
は正確に活性なキーマップを走査する。 グローバルキーマップのみを走査するには、 keymapとして(keymap)
(空のキーマップ)を渡す。firstonlyが
non-ascii
であると、 戻り値は、可能なキー列のリストではなく、 最初にみつかったキー列を表す1つの文字列である。 firstonlyがt
であると、 値は最初のキー列であるが、 ASCII文字(あるいはASCII文字のメタ変種)のみから成るキー列が 他のキー列より優先される。noindirectが
nil
以外であると、where-is-internal
は間接項目を辿らない。 これにより、間接項目そのものを探すことができる。(where-is-internal 'describe-function) ⇒ ("\^hf" "\^hd")
この関数は、現在のすべてのキーバインディングの一覧を作成し、 ‘*Help*’という名前のバッファに表示する。 テキストはモードごとにまとめられ、 マイナモード、メジャーモード、グローバルバインディングの順である。
prefixが
nil
以外であると、それはプレフィックスキーであること。 そうすると、prefixで始まるキーのみの一覧を作る。一覧では、メタ文字は、<ESC>に続けて対応する非メタ文字で表す。
連続したASCIIコードの一連の文字が同じ定義である場合には、 それらをまとめて‘firstchar..lastchar’と表示する。 この場合、どの文字であるか理解するには、 ASCIIコードを知っている必要がある。 たとえば、デフォルトのグローバルキーマップでは、 ‘<SPC>.. ~’の文字が1行に表示される。 <SPC>はASCIIコード32、~はASCIIコード126であり、 そのあいだには普通の印字文字(英文字、数字文字、句読点文字など)が すべて含まれる。 これらの文字はすべて
self-insert-command
にバインドされている。