このセクションではヘルプ情報のプリントのために、すべてのカレントキーマップのスキャンに使用される関数を説明します。特定のキーマップのバインディングを表示するにはdescribe-keymap
コマンドを使用してください(Other Help Commands in The GNU Emacs Manualを参照)。
この関数は、(0個以上のプレフィクスキーを通じて)keymapから到達可能なすべてのキーマップのリストをリターンする。リターン値は(key
.
map)
のような形式の要素をもつ連想リスト(alist)である。ここでkeyはkeymap内での定義がmapであるようなプレフィクスキーである。
alistの要素はkeyの長さにたいして昇順にソートされている。1つ目の要素は常に([] .
keymap)
。これは指定されたキーマップがイベントなしのプレフィクスによって、自分自身からアクセス可能だからである。
prefixが与えられたら、それはプレフィクスキーシーケンスである。その場合にはprefixで始まるプレフィクスキーをもつサブマップだけがaccessible-keymaps
に含まれる。これらの要素の意味は(accessible-keymaps)
の値の場合と同様であり、いくつかの要素が省略されている点だけが異なる。
以下の例ではリターンされるalistにより‘^[’と表示されるキーESCがプレフィクスキーであり、その定義がsparseキーマップ(keymap
(83 . center-paragraph) (115 . foo))
であることが示される。
(accessible-keymaps (current-local-map))
⇒(([] keymap
(27 keymap ; 以降ESCにたいするこのキーマップが繰り返されることに注意
(83 . center-paragraph)
(115 . center-line))
(9 . tab-to-tab-stop))
("^[" keymap (83 . center-paragraph) (115 . foo)))
また以下の例ではC-hは(keymap (118
.
describe-variable)…)
で始まるsparseキーマップを使用するプレフィクスキーである。他のプレフィクス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) ...))
これらが実際に目にするであろうキーマップのすべてではない。
関数map-keymap
はkeymap内のバインディングそれぞれにたいして1回functionを呼び出す。呼び出す際の引数はイベント型と、そのバインディングの値の2つ。keymapに親キーマップがあれば、その親キーマップのバインディングも含まれる。これは再帰的に機能する。つまりその親キーマップ自身が親キーマップをもてば、それのバインディングも含まれる、といった具合である。
これはキーマップ内のすべてのバインディングを検証するもっとも明快な方法である。
この関数はwhere-is
コマンド(Help in The GNU Emacs
Manualを参照)により使用されるサブルーチンである。これはキーマップのセット内でcommandにバインドされる、(任意の長さの)キーシーケンスすべてのリストをリターンする。
引数commandには任意のオブジェクトを指定できる。このオブジェクトはすべてのキーマップエントリーにたいして、eq
を使用して比較される。
keymapがnil
なら、overriding-local-map
の値とは無関係に(overriding-local-map
の値がnil
であると装って)、カレントアクティブキーマップをマップとして使用する。keymapがキーマップならkeymapとグローバルキーマップが検索されるマップとなる。keymapがキーマップのリストなら、それらのキーマップだけが検索される。
keymapにたいする式としては、通常はoverriding-local-map
を使用するのが最善である。その場合にはwhere-is-internal
は正にアクティブなキーマップを検索する。グローバルマップだけを検索するにはkeymapの値に(keymap)
(空のキーマップ)を渡せばよい。
firstonlyがnon-ascii
なら、値はすべての可能なキーシーケンスのリストではなく最初に見つかったキーシーケンスを表す単一のベクターとなる。firstonlyがt
なら、値は最初のキーシーケンスだが全体がASCII文字(またはメタ修飾されたASCII文字)で構成されるキーシーケンスが他のすべてのキーシーケンスに優先されて、リターン値がメニューバインディングになることは決してない。
noindirectが非nil
ならwhere-is-internal
は自身のコマンドを探すためにメニューアイテムの内部を調べない。これによりメニューアイテム自体の検索が可能になる。
5つ目の引数no-remapはこの関数がコマンドリマッピング(コマンドのリマップを参照)を扱う方法を決定する。興味深いケースが2つある:
no-remapがnil
ならother-commandにたいするバインディングを探して、commandにたいするバインディングであるかのようにそれらを扱う。no-remapが非nil
ならそれらのバインディングを探すかわりに、利用可能なキーシーケンスリストにベクター[remap
other-command]
を含める。
no-remapがnil
なら、commandではなくother-commandにたいするバインディングをリターンする。no-remapが非nil
なら、リマップされていることを無視してcommandにたいするバインディングをリターンする。
[some-event]
のようなキーバインディングをマップするコマンドがあり、some-event
には非nil
のnon-key-event
プロパティを含んだシンボルplistがある場合には、そのバインディングはwhere-is-internal
によって無視される。
この関数はすべてのカレントキーバインディングのリストを作成して、*Help*という名前のバッファーにそれを表示する。テキストはモードごとにグループ化されて順番はマイナーモード、メジャーモード、グローバルバインディングの順である。
prefixが非nil
なら、それはプレフィクスキーである。その場合にはリストに含まれるのはprefixで始まるキーだけになる。
複数の連続するASCIIコードが同じ定義をもつとき、それらは‘firstchar..lastchar’のようにまとめて表示される。この場合にはそれがどの文字に該当するかを理解するには、そのASCIIコードを知っている必要がある。たとえばデフォルトグローバルマップでは文字‘SPC
..
~’は1行で記述される。SPCはASCIIの32,~はASCIIの126で、その間のすべての文字には通常のプリント文字(アルファベット文字や数字、区切り文字等)が含まれる。これらの文字はすべてself-insert-command
にバインドされる。
buffer-or-nameが非nil
のならそれはバッファーかバッファー名である。その場合はdescribe-bindings
はカレントバッファーのかわりに、そのバッファーのバインディングをリストする。