This section describes functions used to scan all the current
keymaps for the sake of printing help information. To display the
bindings in a particular keymap, you can use the
describe-keymap
command (see Other Help
Commands in The GNU Emacs Manual)
This function returns a list of all the keymaps that can be reached (via
zero or more prefix keys) from keymap. The value is an
association list with elements of the form (key .
map)
, where key is a prefix key whose definition in
keymap is map.
The elements of the alist are ordered so that the key increases
in length. The first element is always ([] . keymap)
,
because the specified keymap is accessible from itself with a prefix of
no events.
If prefix is given, it should be a prefix key sequence; then
accessible-keymaps
includes only the submaps whose prefixes start
with prefix. These elements look just as they do in the value of
(accessible-keymaps)
; the only difference is that some elements
are omitted.
In the example below, the returned alist indicates that the key
ESC, which is displayed as ‘^[’, is a prefix key whose
definition is the sparse keymap (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)))
In the following example, C-h is a prefix key that uses a sparse
keymap starting with (keymap (118 . describe-variable)…)
.
Another prefix, C-x 4, uses a keymap which is also the value of
the variable ctl-x-4-map
. The event mode-line
is one of
several dummy events used as prefixes for mouse actions in special parts
of a window.
(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) …))
These are not all the keymaps you would see in actuality.
The function map-keymap
calls function once
for each binding in keymap. It passes two arguments,
the event type and the value of the binding. If keymap
has a parent, the parent’s bindings are included as well.
This works recursively: if the parent has itself a parent, then the
grandparent’s bindings are also included and so on.
This function is the cleanest way to examine all the bindings in a keymap.
This function is a subroutine used by the where-is
command
(see Help in The GNU Emacs Manual). It returns a list
of all key sequences (of any length) that are bound to command in a
set of keymaps.
The argument command can be any object; it is compared with all
keymap entries using eq
.
If keymap is nil
, then the maps used are the current active
keymaps, disregarding overriding-local-map
(that is, pretending
its value is nil
). If keymap is a keymap, then the
maps searched are keymap and the global keymap. If keymap
is a list of keymaps, only those keymaps are searched.
Usually it’s best to use overriding-local-map
as the expression
for keymap. Then where-is-internal
searches precisely
the keymaps that are active. To search only the global map, pass the
value (keymap)
(an empty keymap) as keymap.
If firstonly is non-ascii
, then the value is a single
vector representing the first key sequence found, rather than a list of
all possible key sequences. If firstonly is t
, then the
value is the first key sequence, except that key sequences consisting
entirely of ASCII characters (or meta variants of ASCII
characters) are preferred to all other key sequences and that the
return value can never be a menu binding.
If noindirect is non-nil
, where-is-internal
doesn’t look
inside menu-items to find their commands. This makes it possible to search for
a menu-item itself.
The fifth argument, no-remap, determines how this function treats command remappings (see Remapping Commands). There are two cases of interest:
If no-remap is nil
, find the bindings for
other-command and treat them as though they are also bindings
for command. If no-remap is non-nil
, include the
vector [remap other-command]
in the list of possible key
sequences, instead of finding those bindings.
If no-remap is nil
, return the bindings for
other-command rather than command. If no-remap is
non-nil
, return the bindings for command, ignoring the
fact that it is remapped.
If a command maps to a key binding like [some-event]
, and
some-event
has a symbol plist containing a non-nil
non-key-event
property, then that binding is ignored by
where-is-internal
.
This function creates a listing of all current key bindings, and displays it in a buffer named *Help*. The text is grouped by modes—minor modes first, then the major mode, then global bindings.
If prefix is non-nil
, it should be a prefix key; then the
listing includes only keys that start with prefix.
When several characters with consecutive ASCII codes have the
same definition, they are shown together, as
‘firstchar..lastchar’. In this instance, you need to
know the ASCII codes to understand which characters this means.
For example, in the default global map, the characters ‘SPC
.. ~’ are described by a single line. SPC is ASCII 32,
~ is ASCII 126, and the characters between them include all
the normal printing characters, (e.g., letters, digits, punctuation,
etc.); all these characters are bound to self-insert-command
.
If buffer-or-name is non-nil
, it should be a buffer or a
buffer name. Then describe-bindings
lists that buffer’s bindings,
instead of the current buffer’s.