Next: Menu Keymaps, Previous: Key Binding Commands, Up: Keymaps [Contents][Index]
このセクションでは、すべてのカレントキーマップをスキャンして、ヘルプ情報をプリントするために使用される関数を説明します。
この関数は、(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
はインダイレクトキーマップ(indirect
keymap: 間接キーマップ)のバインディングを追跡しない。これにより、インダイレクト定義自体にたいして検索が可能になる。
5つ目の引数no-remapは、この関数がコマンドリマッピング(Remapping Commandsを参照)を扱う方法を決定する。興味深いケースが2つある:
no-remapがnil
の場合は、other-commandにたいするバインディングを探して、commandにたいするバインディングであるかのようにそれらを扱う。no-remapが非nil
の場合は、それらのバインディングを探すかわりに、利用可能なキーシーケンスリストに、ベクター[remap
other-command]
を含める。
no-remapがnil
の場合は、commandではなくother-commandにたいするバインディングをリターンする。no-remapが非nil
の場合は、リマップされていることを無視して、commandにたいするバインディングをリターンする。
この関数は、すべてのカレントキーバインディングのリストを作成して、*Help*という名前のバッファーにそれを表示する。テキストはモードごとにグループ化され、順番はマイナーモード、メジャーモード、グローバルバインディングの順である。
prefixが非nil
の場合、それはプレフィクスキーである。その場合、リストに含まれるのはprefixで始まるキーだけになる。
複数の連続するASCIIコードが同じ定義をもつとき、それらは‘firstchar..lastchar’のようにまとめて表示される。この場合、それがどの文字に該当するかを理解するためには、そのASCIIコードを知っている必要がある。たとえば、デフォルトグローバルマップでは、文字‘SPC
..
~’は1行で記述される。SPCはASCIIの32,~はASCIIの126で、その間のすべての文字には、通常のプリント文字(アルファベット文字、数字、句読点など)が含まれる。これらの文字はすべて、self-insert-command
にバインドされる。
buffer-or-nameが非nil
の場合、それはバッファー、またはバッファー名である。その場合、describe-bindings
はカレントバッファーのかわりに、そのバッファーのバインディングをリストする。