(Top): Update subnode menu.
[bpt/emacs.git] / lispref / keymaps.texi
CommitLineData
73804d4b
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
651f374c 3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1998, 1999, 2000, 2002, 2003,
ceb4c4d3 4@c 2004, 2005, 2006 Free Software Foundation, Inc.
73804d4b
RS
5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/keymaps
7@node Keymaps, Modes, Command Loop, Top
8@chapter Keymaps
9@cindex keymap
10
11 The bindings between input events and commands are recorded in data
12structures called @dfn{keymaps}. Each binding in a keymap associates
8a36c244 13(or @dfn{binds}) an individual event type, either to another keymap or to
f9f59935
RS
14a command. When an event type is bound to a keymap, that keymap is used
15to look up the next input event; this continues until a command is
16found. The whole process is called @dfn{key lookup}.
73804d4b
RS
17
18@menu
19* Keymap Terminology:: Definitions of terms pertaining to keymaps.
20* Format of Keymaps:: What a keymap looks like as a Lisp object.
21* Creating Keymaps:: Functions to create and copy keymaps.
22* Inheritance and Keymaps:: How one keymap can inherit the bindings
23 of another keymap.
24* Prefix Keys:: Defining a key with a keymap as its definition.
59e58738
RS
25* Active Keymaps:: How Emacs searches the active keymaps
26 for a key binding.
27* Searching Keymaps:: A pseudo-Lisp summary of searching active maps.
28* Controlling Active Maps:: Each buffer has a local keymap
73804d4b
RS
29 to override the standard (global) bindings.
30 A minor mode can also override them.
59e58738 31* Key Lookup:: Finding a key's binding in one keymap.
73804d4b
RS
32* Functions for Key Lookup:: How to request key lookup.
33* Changing Key Bindings:: Redefining a key in a keymap.
229644e7 34* Remapping Commands:: Bindings that translate one command to another.
73804d4b
RS
35* Key Binding Commands:: Interactive interfaces for redefining keys.
36* Scanning Keymaps:: Looking through all keymaps, for printing help.
f9f59935 37* Menu Keymaps:: Defining a menu as a keymap.
73804d4b
RS
38@end menu
39
40@node Keymap Terminology
41@section Keymap Terminology
42@cindex key
43@cindex keystroke
44@cindex key binding
45@cindex binding of a key
46@cindex complete key
47@cindex undefined key
48
49 A @dfn{keymap} is a table mapping event types to definitions (which
50can be any Lisp objects, though only certain types are meaningful for
51execution by the command loop). Given an event (or an event type) and a
969fe9b5
RS
52keymap, Emacs can get the event's definition. Events include
53characters, function keys, and mouse actions (@pxref{Input Events}).
73804d4b
RS
54
55 A sequence of input events that form a unit is called a
56@dfn{key sequence}, or @dfn{key} for short. A sequence of one event
57is always a key sequence, and so are some multi-event sequences.
58
59 A keymap determines a binding or definition for any key sequence. If
60the key sequence is a single event, its binding is the definition of the
61event in the keymap. The binding of a key sequence of more than one
62event is found by an iterative process: the binding of the first event
63is found, and must be a keymap; then the second event's binding is found
64in that keymap, and so on until all the events in the key sequence are
65used up.
66
67 If the binding of a key sequence is a keymap, we call the key sequence
68a @dfn{prefix key}. Otherwise, we call it a @dfn{complete key} (because
87b2d5ff 69no more events can be added to it). If the binding is @code{nil},
73804d4b
RS
70we call the key @dfn{undefined}. Examples of prefix keys are @kbd{C-c},
71@kbd{C-x}, and @kbd{C-x 4}. Examples of defined complete keys are
72@kbd{X}, @key{RET}, and @kbd{C-x 4 C-f}. Examples of undefined complete
73keys are @kbd{C-x C-g}, and @kbd{C-c 3}. @xref{Prefix Keys}, for more
74details.
75
76 The rule for finding the binding of a key sequence assumes that the
77intermediate bindings (found for the events before the last) are all
78keymaps; if this is not so, the sequence of events does not form a
f9f59935
RS
79unit---it is not really one key sequence. In other words, removing one
80or more events from the end of any valid key sequence must always yield
81a prefix key. For example, @kbd{C-f C-n} is not a key sequence;
82@kbd{C-f} is not a prefix key, so a longer sequence starting with
83@kbd{C-f} cannot be a key sequence.
84
85 The set of possible multi-event key sequences depends on the bindings
86for prefix keys; therefore, it can be different for different keymaps,
87and can change when bindings are changed. However, a one-event sequence
88is always a key sequence, because it does not depend on any prefix keys
89for its well-formedness.
73804d4b
RS
90
91 At any time, several primary keymaps are @dfn{active}---that is, in
92use for finding key bindings. These are the @dfn{global map}, which is
93shared by all buffers; the @dfn{local keymap}, which is usually
94associated with a specific major mode; and zero or more @dfn{minor mode
87b2d5ff 95keymaps}, which belong to currently enabled minor modes. (Not all minor
73804d4b
RS
96modes have keymaps.) The local keymap bindings shadow (i.e., take
97precedence over) the corresponding global bindings. The minor mode
98keymaps shadow both local and global keymaps. @xref{Active Keymaps},
99for details.
100
402fe423
RS
101 The Emacs Lisp representation for a key sequence is a string or vector.
102You can enter key sequence constants using the ordinary string or vector
103representation; it is also convenient to use @code{kbd}:
104
105@defmac kbd keyseq-text
106This macro converts the text @var{keyseq-text} (a string constant)
107into a key sequence (a string or vector constant). The contents
108of @var{keyseq-text} should describe the key sequence using the syntax
db8af011
LT
109used in this manual. More precisely, it uses the same syntax that
110Edit Macro mode uses for editing keyboard macros (@pxref{Edit Keyboard
111Macro,,, emacs, The GNU Emacs Manual}).
402fe423
RS
112
113@example
114(kbd "C-x") @result{} "\C-x"
115(kbd "C-x C-f") @result{} "\C-x\C-f"
402fe423
RS
116(kbd "C-x 4 C-f") @result{} "\C-x4\C-f"
117(kbd "X") @result{} "X"
118(kbd "RET") @result{} "\^M"
db8af011
LT
119(kbd "C-c SPC") @result{} "\C-c@ "
120(kbd "<f1> SPC") @result{} [f1 32]
121(kbd "C-M-<down>") @result{} [C-M-down]
402fe423
RS
122@end example
123@end defmac
124
73804d4b
RS
125@node Format of Keymaps
126@section Format of Keymaps
127@cindex format of keymaps
128@cindex keymap format
129@cindex full keymap
130@cindex sparse keymap
131
132 A keymap is a list whose @sc{car} is the symbol @code{keymap}. The
133remaining elements of the list define the key bindings of the keymap.
aa2ac20c
RS
134A symbol whose function definition is a keymap is also a keymap. Use
135the function @code{keymapp} (see below) to test whether an object is a
136keymap.
73804d4b 137
f9f59935
RS
138 Several kinds of elements may appear in a keymap, after the symbol
139@code{keymap} that begins it:
87b2d5ff 140
f9f59935
RS
141@table @code
142@item (@var{type} .@: @var{binding})
143This specifies one binding, for events of type @var{type}. Each
144ordinary binding applies to events of a particular @dfn{event type},
145which is always a character or a symbol. @xref{Classifying Events}.
73804d4b 146
f9f59935 147@item (t .@: @var{binding})
73804d4b 148@cindex default key binding
f9f59935
RS
149This specifies a @dfn{default key binding}; any event not bound by other
150elements of the keymap is given @var{binding} as its binding. Default
151bindings allow a keymap to bind all possible event types without having
152to enumerate all of them. A keymap that has a default binding
db8af011
LT
153completely masks any lower-precedence keymap, except for events
154explicitly bound to @code{nil} (see below).
f9f59935 155
229644e7
RS
156@item @var{char-table}
157If an element of a keymap is a char-table, it counts as holding
158bindings for all character events with no modifier bits
159(@pxref{modifier bits}): element @var{n} is the binding for the
160character with code @var{n}. This is a compact way to record lots of
161bindings. A keymap with such a char-table is called a @dfn{full
162keymap}. Other keymaps are called @dfn{sparse keymaps}.
163
f9f59935 164@item @var{string}
73804d4b
RS
165@cindex keymap prompt string
166@cindex overall prompt string
167@cindex prompt string of keymap
f9f59935 168Aside from bindings, a keymap can also have a string as an element.
73804d4b 169This is called the @dfn{overall prompt string} and makes it possible to
e465fdc2 170use the keymap as a menu. @xref{Defining Menus}.
f9f59935 171@end table
73804d4b 172
d64b177a
SM
173When the binding is @code{nil}, it doesn't constitute a definition
174but it does take precedence over a default binding or a binding in the
175parent keymap. On the other hand, a binding of @code{nil} does
176@emph{not} override lower-precedence keymaps; thus, if the local map
177gives a binding of @code{nil}, Emacs uses the binding from the
178global map.
179
73804d4b 180@cindex meta characters lookup
f9f59935 181 Keymaps do not directly record bindings for the meta characters.
5f1f5955
GM
182Instead, meta characters are regarded for purposes of key lookup as
183sequences of two characters, the first of which is @key{ESC} (or
184whatever is currently the value of @code{meta-prefix-char}). Thus, the
185key @kbd{M-a} is internally represented as @kbd{@key{ESC} a}, and its
186global binding is found at the slot for @kbd{a} in @code{esc-map}
187(@pxref{Prefix Keys}).
188
189 This conversion applies only to characters, not to function keys or
190other input events; thus, @kbd{M-@key{end}} has nothing to do with
191@kbd{@key{ESC} @key{end}}.
73804d4b
RS
192
193 Here as an example is the local keymap for Lisp mode, a sparse
194keymap. It defines bindings for @key{DEL} and @key{TAB}, plus @kbd{C-c
195C-l}, @kbd{M-C-q}, and @kbd{M-C-x}.
196
197@example
198@group
199lisp-mode-map
177c0ea7 200@result{}
73804d4b
RS
201@end group
202@group
177c0ea7 203(keymap
8a36c244
RS
204 (3 keymap
205 ;; @kbd{C-c C-z}
206 (26 . run-lisp))
73804d4b
RS
207@end group
208@group
8a36c244
RS
209 (27 keymap
210 ;; @r{@kbd{M-C-x}, treated as @kbd{@key{ESC} C-x}}
211 (24 . lisp-send-defun)
212 keymap
213 ;; @r{@kbd{M-C-q}, treated as @kbd{@key{ESC} C-q}}
214 (17 . indent-sexp)))
73804d4b
RS
215@end group
216@group
8a36c244
RS
217 ;; @r{This part is inherited from @code{lisp-mode-shared-map}.}
218 keymap
219 ;; @key{DEL}
220 (127 . backward-delete-char-untabify)
73804d4b
RS
221@end group
222@group
177c0ea7 223 (27 keymap
73804d4b 224 ;; @r{@kbd{M-C-q}, treated as @kbd{@key{ESC} C-q}}
8a36c244
RS
225 (17 . indent-sexp))
226 (9 . lisp-indent-line))
73804d4b
RS
227@end group
228@end example
229
230@defun keymapp object
231This function returns @code{t} if @var{object} is a keymap, @code{nil}
87b2d5ff 232otherwise. More precisely, this function tests for a list whose
aa2ac20c
RS
233@sc{car} is @code{keymap}, or for a symbol whose function definition
234satisfies @code{keymapp}.
73804d4b
RS
235
236@example
237@group
238(keymapp '(keymap))
239 @result{} t
240@end group
241@group
aa2ac20c
RS
242(fset 'foo '(keymap))
243(keymapp 'foo)
244 @result{} t
245@end group
246@group
73804d4b
RS
247(keymapp (current-global-map))
248 @result{} t
249@end group
250@end example
251@end defun
252
253@node Creating Keymaps
254@section Creating Keymaps
255@cindex creating keymaps
256
257 Here we describe the functions for creating keymaps.
258
171920a6
RS
259@defun make-sparse-keymap &optional prompt
260This function creates and returns a new sparse keymap with no entries.
261(A sparse keymap is the kind of keymap you usually want.) The new
262keymap does not contain a char-table, unlike @code{make-keymap}, and
263does not bind any events.
73804d4b
RS
264
265@example
266@group
171920a6
RS
267(make-sparse-keymap)
268 @result{} (keymap)
73804d4b
RS
269@end group
270@end example
271
272If you specify @var{prompt}, that becomes the overall prompt string for
b08d86c6 273the keymap. The prompt string should be provided for menu keymaps
e465fdc2 274(@pxref{Defining Menus}).
73804d4b
RS
275@end defun
276
171920a6
RS
277@defun make-keymap &optional prompt
278This function creates and returns a new full keymap. That keymap
279contains a char-table (@pxref{Char-Tables}) with slots for all
280characters without modifiers. The new keymap initially binds all
281these characters to @code{nil}, and does not bind any other kind of
282event. The argument @var{prompt} specifies a
283prompt string, as in @code{make-sparse-keymap}.
73804d4b
RS
284
285@example
286@group
171920a6
RS
287(make-keymap)
288 @result{} (keymap #^[t nil nil nil @dots{} nil nil keymap])
73804d4b
RS
289@end group
290@end example
171920a6
RS
291
292A full keymap is more efficient than a sparse keymap when it holds
293lots of bindings; for just a few, the sparse keymap is better.
73804d4b
RS
294@end defun
295
296@defun copy-keymap keymap
87b2d5ff 297This function returns a copy of @var{keymap}. Any keymaps that
73804d4b
RS
298appear directly as bindings in @var{keymap} are also copied recursively,
299and so on to any number of levels. However, recursive copying does not
300take place when the definition of a character is a symbol whose function
301definition is a keymap; the same symbol appears in the new copy.
302@c Emacs 19 feature
303
304@example
305@group
306(setq map (copy-keymap (current-local-map)))
307@result{} (keymap
308@end group
309@group
310 ;; @r{(This implements meta characters.)}
177c0ea7 311 (27 keymap
73804d4b
RS
312 (83 . center-paragraph)
313 (115 . center-line))
314 (9 . tab-to-tab-stop))
315@end group
316
317@group
318(eq map (current-local-map))
319 @result{} nil
320@end group
321@group
322(equal map (current-local-map))
323 @result{} t
324@end group
325@end example
326@end defun
327
328@node Inheritance and Keymaps
329@section Inheritance and Keymaps
330@cindex keymap inheritance
331@cindex inheriting a keymap's bindings
332
0521d6f5
RS
333 A keymap can inherit the bindings of another keymap, which we call the
334@dfn{parent keymap}. Such a keymap looks like this:
73804d4b
RS
335
336@example
0521d6f5 337(keymap @var{bindings}@dots{} . @var{parent-keymap})
73804d4b
RS
338@end example
339
340@noindent
341The effect is that this keymap inherits all the bindings of
0521d6f5 342@var{parent-keymap}, whatever they may be at the time a key is looked up,
73804d4b
RS
343but can add to them or override them with @var{bindings}.
344
0521d6f5 345If you change the bindings in @var{parent-keymap} using @code{define-key}
73804d4b
RS
346or other key-binding functions, these changes are visible in the
347inheriting keymap unless shadowed by @var{bindings}. The converse is
348not true: if you use @code{define-key} to change the inheriting keymap,
0521d6f5
RS
349that affects @var{bindings}, but has no effect on @var{parent-keymap}.
350
351The proper way to construct a keymap with a parent is to use
352@code{set-keymap-parent}; if you have code that directly constructs a
353keymap with a parent, please convert the program to use
354@code{set-keymap-parent} instead.
355
356@defun keymap-parent keymap
357This returns the parent keymap of @var{keymap}. If @var{keymap}
358has no parent, @code{keymap-parent} returns @code{nil}.
359@end defun
360
361@defun set-keymap-parent keymap parent
362This sets the parent keymap of @var{keymap} to @var{parent}, and returns
363@var{parent}. If @var{parent} is @code{nil}, this function gives
364@var{keymap} no parent at all.
365
366If @var{keymap} has submaps (bindings for prefix keys), they too receive
367new parent keymaps that reflect what @var{parent} specifies for those
368prefix keys.
369@end defun
73804d4b 370
6a0f8bed 371 Here is an example showing how to make a keymap that inherits
73804d4b
RS
372from @code{text-mode-map}:
373
374@example
0521d6f5
RS
375(let ((map (make-sparse-keymap)))
376 (set-keymap-parent map text-mode-map)
377 map)
73804d4b
RS
378@end example
379
6a0f8bed
RS
380 A non-sparse keymap can have a parent too, but this is not very
381useful. A non-sparse keymap always specifies something as the binding
382for every numeric character code without modifier bits, even if it is
383@code{nil}, so these character's bindings are never inherited from
384the parent keymap.
385
73804d4b
RS
386@node Prefix Keys
387@section Prefix Keys
388@cindex prefix key
389
f9f59935 390 A @dfn{prefix key} is a key sequence whose binding is a keymap. The
969fe9b5 391keymap defines what to do with key sequences that extend the prefix key.
f9f59935
RS
392For example, @kbd{C-x} is a prefix key, and it uses a keymap that is
393also stored in the variable @code{ctl-x-map}. This keymap defines
394bindings for key sequences starting with @kbd{C-x}.
395
1911e6e5
RS
396 Some of the standard Emacs prefix keys use keymaps that are
397also found in Lisp variables:
73804d4b
RS
398
399@itemize @bullet
400@item
401@vindex esc-map
402@findex ESC-prefix
f9f59935
RS
403@code{esc-map} is the global keymap for the @key{ESC} prefix key. Thus,
404the global definitions of all meta characters are actually found here.
405This map is also the function definition of @code{ESC-prefix}.
73804d4b
RS
406
407@item
408@cindex @kbd{C-h}
a9f0a989 409@code{help-map} is the global keymap for the @kbd{C-h} prefix key.
73804d4b
RS
410
411@item
412@cindex @kbd{C-c}
413@vindex mode-specific-map
f9f59935
RS
414@code{mode-specific-map} is the global keymap for the prefix key
415@kbd{C-c}. This map is actually global, not mode-specific, but its name
416provides useful information about @kbd{C-c} in the output of @kbd{C-h b}
417(@code{display-bindings}), since the main use of this prefix key is for
418mode-specific bindings.
73804d4b
RS
419
420@item
421@cindex @kbd{C-x}
422@vindex ctl-x-map
423@findex Control-X-prefix
a9f0a989
RS
424@code{ctl-x-map} is the global keymap used for the @kbd{C-x} prefix key.
425This map is found via the function cell of the symbol
f9f59935 426@code{Control-X-prefix}.
73804d4b 427
1911e6e5
RS
428@item
429@cindex @kbd{C-x @key{RET}}
430@vindex mule-keymap
431@code{mule-keymap} is the global keymap used for the @kbd{C-x @key{RET}}
432prefix key.
433
73804d4b
RS
434@item
435@cindex @kbd{C-x 4}
436@vindex ctl-x-4-map
f9f59935
RS
437@code{ctl-x-4-map} is the global keymap used for the @kbd{C-x 4} prefix
438key.
73804d4b
RS
439
440@c Emacs 19 feature
441@item
442@cindex @kbd{C-x 5}
443@vindex ctl-x-5-map
f9f59935
RS
444@code{ctl-x-5-map} is the global keymap used for the @kbd{C-x 5} prefix
445key.
73804d4b
RS
446
447@c Emacs 19 feature
448@item
1911e6e5
RS
449@cindex @kbd{C-x 6}
450@vindex 2C-mode-map
451@code{2C-mode-map} is the global keymap used for the @kbd{C-x 6} prefix
452key.
453
454@item
455@cindex @kbd{C-x v}
456@vindex vc-prefix-map
457@code{vc-prefix-map} is the global keymap used for the @kbd{C-x v} prefix
458key.
459
460@item
f141c9bb 461@cindex @kbd{M-o}
1911e6e5 462@vindex facemenu-keymap
f141c9bb 463@code{facemenu-keymap} is the global keymap used for the @kbd{M-o}
1911e6e5
RS
464prefix key.
465
466@c Emacs 19 feature
467@item
c5568a11
LT
468The other Emacs prefix keys are @kbd{M-g}, @kbd{C-x @@}, @kbd{C-x a i},
469@kbd{C-x @key{ESC}} and @kbd{@key{ESC} @key{ESC}}. They use keymaps
470that have no special names.
73804d4b
RS
471@end itemize
472
f9f59935
RS
473 The keymap binding of a prefix key is used for looking up the event
474that follows the prefix key. (It may instead be a symbol whose function
475definition is a keymap. The effect is the same, but the symbol serves
476as a name for the prefix key.) Thus, the binding of @kbd{C-x} is the
a9f0a989 477symbol @code{Control-X-prefix}, whose function cell holds the keymap
f9f59935 478for @kbd{C-x} commands. (The same keymap is also the value of
73804d4b
RS
479@code{ctl-x-map}.)
480
87b2d5ff
RS
481 Prefix key definitions can appear in any active keymap. The
482definitions of @kbd{C-c}, @kbd{C-x}, @kbd{C-h} and @key{ESC} as prefix
483keys appear in the global map, so these prefix keys are always
73804d4b
RS
484available. Major and minor modes can redefine a key as a prefix by
485putting a prefix key definition for it in the local map or the minor
486mode's map. @xref{Active Keymaps}.
487
488 If a key is defined as a prefix in more than one active map, then its
489various definitions are in effect merged: the commands defined in the
490minor mode keymaps come first, followed by those in the local map's
491prefix definition, and then by those from the global map.
492
493 In the following example, we make @kbd{C-p} a prefix key in the local
494keymap, in such a way that @kbd{C-p} is identical to @kbd{C-x}. Then
495the binding for @kbd{C-p C-f} is the function @code{find-file}, just
496like @kbd{C-x C-f}. The key sequence @kbd{C-p 6} is not found in any
497active keymap.
498
499@example
500@group
501(use-local-map (make-sparse-keymap))
502 @result{} nil
503@end group
504@group
505(local-set-key "\C-p" ctl-x-map)
506 @result{} nil
507@end group
508@group
509(key-binding "\C-p\C-f")
510 @result{} find-file
511@end group
512
513@group
514(key-binding "\C-p6")
515 @result{} nil
516@end group
517@end example
518
b6954afd 519@defun define-prefix-command symbol &optional mapvar prompt
73804d4b 520@cindex prefix command
db8af011 521@anchor{Definition of define-prefix-command}
f9f59935 522This function prepares @var{symbol} for use as a prefix key's binding:
62f20204 523it creates a sparse keymap and stores it as @var{symbol}'s function
f9f59935 524definition. Subsequently binding a key sequence to @var{symbol} will
b6954afd 525make that key sequence into a prefix key. The return value is @code{symbol}.
f9f59935
RS
526
527This function also sets @var{symbol} as a variable, with the keymap as
b6954afd
RS
528its value. But if @var{mapvar} is non-@code{nil}, it sets @var{mapvar}
529as a variable instead.
f9f59935 530
b6954afd 531If @var{prompt} is non-@code{nil}, that becomes the overall prompt
b08d86c6 532string for the keymap. The prompt string should be given for menu keymaps
e465fdc2 533(@pxref{Defining Menus}).
73804d4b
RS
534@end defun
535
87b2d5ff
RS
536@node Active Keymaps
537@section Active Keymaps
538@cindex active keymap
539@cindex global keymap
540@cindex local keymap
73804d4b 541
d38edfc3 542 Emacs normally contains many keymaps; at any given time, just a few
59e58738 543of them are @dfn{active}, meaning that they participate in the
d38edfc3
RS
544interpretation of user input. All the active keymaps are used
545together to determine what command to execute when a key is entered.
546Emacs searches these keymaps one by one, in a standard order, until it
59e58738 547finds a binding in one of the keymaps.
d38edfc3
RS
548
549 Normally the active keymaps are the @code{keymap} property keymap,
550the keymaps of any enabled minor modes, the current buffer's local
551keymap, and the global keymap, in that order. Therefore, Emacs
59e58738
RS
552searches for each input key sequence in all these keymaps. Here is a
553pseudo-Lisp description of how this process works:
554
555@lisp
556(or (if overriding-terminal-local-map
557 (@var{find-in} overriding-terminal-local-map)
558 (if overriding-local-map
559 (@var{find-in} overriding-local-map)
560 (or (@var{find-in} (get-text-property (point) 'keymap))
561 (@var{find-in-any} emulation-mode-map-alists)
562 (@var{find-in-any} minor-mode-overriding-map-alist)
563 (@var{find-in-any} minor-mode-map-alist)
564 (if (get-text-property (point) 'local-map))
565 (@var{find-in} (get-text-property (point) 'local-map))
566 (@var{find-in} (current-local-map))))))
567 (@var{find-in} (current-global-map)))
568@end lisp
569
570@noindent
571Here, the pseudo-function @var{find-in} means to look up the key
572sequence in a single map, and @var{find-in-any} means to search the
573appropriate keymaps from an alist. (Searching a single keymap for a
574binding is called @dfn{key lookup}; see @ref{Key Lookup}.)
73804d4b 575
87b2d5ff
RS
576 The @dfn{global keymap} holds the bindings of keys that are defined
577regardless of the current buffer, such as @kbd{C-f}. The variable
578@code{global-map} holds this keymap, which is always active.
73804d4b 579
d38edfc3
RS
580 Each buffer may have another keymap, its @dfn{local keymap}, which
581may contain new or overriding definitions for keys. The current
582buffer's local keymap is always active except when
583@code{overriding-local-map} overrides it. The @code{local-map} text
584or overlay property can specify an alternative local keymap for certain
585parts of the buffer; see @ref{Special Properties}.
73804d4b 586
a9f0a989 587 Each minor mode can have a keymap; if it does, the keymap is active
d38edfc3
RS
588when the minor mode is enabled. Modes for emulation can specify
589additional active keymaps through the variable
590@code{emulation-mode-map-alists}.
591
8ed9e36a 592 The highest precedence normal keymap comes from the @code{keymap}
d38edfc3
RS
593text or overlay property. If that is non-@code{nil}, it is the first
594keymap to be processed, in normal circumstances.
595
7fdc81ab 596 However, there are also special ways for programs to substitute
8a36c244 597other keymaps for some of those. The variable
d38edfc3
RS
598@code{overriding-local-map}, if non-@code{nil}, specifies a keymap
599that replaces all the usual active keymaps except the global keymap.
600Another way to do this is with @code{overriding-terminal-local-map};
601it operates on a per-terminal basis. These variables are documented
602below.
73804d4b 603
87b2d5ff
RS
604@cindex major mode keymap
605 Since every buffer that uses the same major mode normally uses the
606same local keymap, you can think of the keymap as local to the mode. A
607change to the local keymap of a buffer (using @code{local-set-key}, for
608example) is seen also in the other buffers that share that keymap.
73804d4b 609
969fe9b5 610 The local keymaps that are used for Lisp mode and some other major
d38edfc3 611modes exist even if they have not yet been used. These local keymaps are
969fe9b5
RS
612the values of variables such as @code{lisp-mode-map}. For most major
613modes, which are less frequently used, the local keymap is constructed
614only when the mode is used for the first time in a session.
73804d4b 615
87b2d5ff
RS
616 The minibuffer has local keymaps, too; they contain various completion
617and exit commands. @xref{Intro to Minibuffers}.
73804d4b 618
a9f0a989
RS
619 Emacs has other keymaps that are used in a different way---translating
620events within @code{read-key-sequence}. @xref{Translating Input}.
621
87b2d5ff 622 @xref{Standard Keymaps}, for a list of standard keymaps.
73804d4b 623
59e58738
RS
624@defun current-active-maps &optional olp
625This returns the list of active keymaps that would be used by the
626command loop in the current circumstances to look up a key sequence.
627Normally it ignores @code{overriding-local-map} and
628@code{overriding-terminal-local-map}, but if @var{olp} is
629non-@code{nil} then it pays attention to them.
630@end defun
631
632@defun key-binding key &optional accept-defaults no-remap
633This function returns the binding for @var{key} according to the
634current active keymaps. The result is @code{nil} if @var{key} is
635undefined in the keymaps.
636
637@c Emacs 19 feature
638The argument @var{accept-defaults} controls checking for default
639bindings, as in @code{lookup-key} (above).
640
641When commands are remapped (@pxref{Remapping Commands}),
642@code{key-binding} normally processes command remappings so as to
643returns the remapped command that will actually be executed. However,
644if @var{no-remap} is non-@code{nil}, @code{key-binding} ignores
645remappings and returns the binding directly specified for @var{key}.
646
647An error is signaled if @var{key} is not a string or a vector.
648
649@example
650@group
651(key-binding "\C-x\C-f")
652 @result{} find-file
653@end group
654@end example
655@end defun
656
657@node Searching Keymaps
658@section Searching the Active Keymaps
659
660 After translation of the input events (@pxref{Translating Input})
661Emacs looks for them in the active keymaps. Here is a pseudo-Lisp
662description of the order in which the active keymaps are searched:
663
664@lisp
665(or (if overriding-terminal-local-map
666 (@var{find-in} overriding-terminal-local-map)
667 (if overriding-local-map
668 (@var{find-in} overriding-local-map)
669 (or (@var{find-in} (get-text-property (point) 'keymap))
670 (@var{find-in-any} emulation-mode-map-alists)
671 (@var{find-in-any} minor-mode-overriding-map-alist)
672 (@var{find-in-any} minor-mode-map-alist)
673 (@var{find-in} (get-text-property (point) 'local-map))
674 (@var{find-in} (current-local-map)))))
675 (@var{find-in} (current-global-map)))
676@end lisp
677
678@noindent
679The @var{find-in} and @var{find-in-any} are pseudo functions that
680searches in one keymap respectively an alist of keymaps.
681
682@enumerate
683@item
684The function finally found may be remapped
685(@pxref{Remapping Commands}).
686
687@item
688Characters that are bound to @code{self-insert-command} are translated
689according to @code{translation-table-for-input} before insertion.
690
691@item
692@code{current-active-maps} returns a list of the
693currently active keymaps at point.
694
695@item
696When a match is found (@pxref{Key Lookup}), if the binding in the
697keymap is a function, the search is over. However if the keymap entry
698is a symbol with a value or a string, Emacs replaces the input key
699sequences with the variable's value or the string, and restarts the
700search of the active keymaps.
701@end enumerate
702
703@node Controlling Active Maps
704@section Controlling the Active Keymaps
705
87b2d5ff
RS
706@defvar global-map
707This variable contains the default global keymap that maps Emacs
59e58738
RS
708keyboard input to commands. The global keymap is normally this
709keymap. The default global keymap is a full keymap that binds
87b2d5ff 710@code{self-insert-command} to all of the printing characters.
73804d4b 711
d38edfc3 712It is normal practice to change the bindings in the global keymap, but you
87b2d5ff
RS
713should not assign this variable any value other than the keymap it starts
714out with.
715@end defvar
73804d4b 716
87b2d5ff
RS
717@defun current-global-map
718This function returns the current global keymap. This is the
719same as the value of @code{global-map} unless you change one or the
720other.
73804d4b 721
73804d4b 722@example
87b2d5ff
RS
723@group
724(current-global-map)
177c0ea7 725@result{} (keymap [set-mark-command beginning-of-line @dots{}
87b2d5ff
RS
726 delete-backward-char])
727@end group
73804d4b 728@end example
87b2d5ff 729@end defun
73804d4b 730
87b2d5ff
RS
731@defun current-local-map
732This function returns the current buffer's local keymap, or @code{nil}
733if it has none. In the following example, the keymap for the
734@samp{*scratch*} buffer (using Lisp Interaction mode) is a sparse keymap
ad800164 735in which the entry for @key{ESC}, @acronym{ASCII} code 27, is another sparse
87b2d5ff 736keymap.
73804d4b 737
87b2d5ff
RS
738@example
739@group
740(current-local-map)
177c0ea7
JB
741@result{} (keymap
742 (10 . eval-print-last-sexp)
743 (9 . lisp-indent-line)
744 (127 . backward-delete-char-untabify)
87b2d5ff
RS
745@end group
746@group
177c0ea7
JB
747 (27 keymap
748 (24 . eval-defun)
87b2d5ff
RS
749 (17 . indent-sexp)))
750@end group
751@end example
752@end defun
73804d4b 753
87b2d5ff
RS
754@defun current-minor-mode-maps
755This function returns a list of the keymaps of currently enabled minor modes.
756@end defun
73804d4b 757
87b2d5ff
RS
758@defun use-global-map keymap
759This function makes @var{keymap} the new current global keymap. It
760returns @code{nil}.
73804d4b 761
87b2d5ff
RS
762It is very unusual to change the global keymap.
763@end defun
73804d4b 764
87b2d5ff
RS
765@defun use-local-map keymap
766This function makes @var{keymap} the new local keymap of the current
767buffer. If @var{keymap} is @code{nil}, then the buffer has no local
768keymap. @code{use-local-map} returns @code{nil}. Most major mode
769commands use this function.
770@end defun
73804d4b 771
87b2d5ff
RS
772@c Emacs 19 feature
773@defvar minor-mode-map-alist
ca1b0914 774@anchor{Definition of minor-mode-map-alist}
87b2d5ff
RS
775This variable is an alist describing keymaps that may or may not be
776active according to the values of certain variables. Its elements look
777like this:
73804d4b 778
87b2d5ff
RS
779@example
780(@var{variable} . @var{keymap})
781@end example
73804d4b 782
87b2d5ff
RS
783The keymap @var{keymap} is active whenever @var{variable} has a
784non-@code{nil} value. Typically @var{variable} is the variable that
785enables or disables a minor mode. @xref{Keymaps and Minor Modes}.
73804d4b 786
87b2d5ff
RS
787Note that elements of @code{minor-mode-map-alist} do not have the same
788structure as elements of @code{minor-mode-alist}. The map must be the
a40d4712
PR
789@sc{cdr} of the element; a list with the map as the second element will
790not do. The @sc{cdr} can be either a keymap (a list) or a symbol whose
791function definition is a keymap.
73804d4b 792
8a36c244
RS
793When more than one minor mode keymap is active, the earlier one in
794@code{minor-mode-map-alist} takes priority. But you should design
87b2d5ff
RS
795minor modes so that they don't interfere with each other. If you do
796this properly, the order will not matter.
73804d4b 797
f9f59935
RS
798See @ref{Keymaps and Minor Modes}, for more information about minor
799modes. See also @code{minor-mode-key-binding} (@pxref{Functions for Key
800Lookup}).
801@end defvar
802
f9f59935
RS
803@defvar minor-mode-overriding-map-alist
804This variable allows major modes to override the key bindings for
805particular minor modes. The elements of this alist look like the
806elements of @code{minor-mode-map-alist}: @code{(@var{variable}
a9f0a989
RS
807. @var{keymap})}.
808
1911e6e5 809If a variable appears as an element of
a9f0a989
RS
810@code{minor-mode-overriding-map-alist}, the map specified by that
811element totally replaces any map specified for the same variable in
812@code{minor-mode-map-alist}.
f9f59935 813
969fe9b5
RS
814@code{minor-mode-overriding-map-alist} is automatically buffer-local in
815all buffers.
87b2d5ff 816@end defvar
73804d4b 817
87b2d5ff
RS
818@defvar overriding-local-map
819If non-@code{nil}, this variable holds a keymap to use instead of the
d38edfc3
RS
820buffer's local keymap, any text property or overlay keymaps, and any
821minor mode keymaps. This keymap, if specified, overrides all other
822maps that would have been active, except for the current global map.
73804d4b
RS
823@end defvar
824
5fe8e44d
RS
825@defvar overriding-terminal-local-map
826If non-@code{nil}, this variable holds a keymap to use instead of
db8af011
LT
827@code{overriding-local-map}, the buffer's local keymap, text property
828or overlay keymaps, and all the minor mode keymaps.
5fe8e44d
RS
829
830This variable is always local to the current terminal and cannot be
831buffer-local. @xref{Multiple Displays}. It is used to implement
832incremental search mode.
833@end defvar
834
4b4b65a6
RS
835@defvar overriding-local-map-menu-flag
836If this variable is non-@code{nil}, the value of
837@code{overriding-local-map} or @code{overriding-terminal-local-map} can
838affect the display of the menu bar. The default value is @code{nil}, so
839those map variables have no effect on the menu bar.
840
841Note that these two map variables do affect the execution of key
842sequences entered using the menu bar, even if they do not affect the
843menu bar display. So if a menu bar key sequence comes in, you should
844clear the variables before looking up and executing that key sequence.
845Modes that use the variables would typically do this anyway; normally
846they respond to events that they do not handle by ``unreading'' them and
847exiting.
848@end defvar
849
f9f59935
RS
850@defvar special-event-map
851This variable holds a keymap for special events. If an event type has a
852binding in this keymap, then it is special, and the binding for the
853event is run directly by @code{read-event}. @xref{Special Events}.
854@end defvar
855
229644e7
RS
856@defvar emulation-mode-map-alists
857This variable holds a list of keymap alists to use for emulations
858modes. It is intended for modes or packages using multiple minor-mode
859keymaps. Each element is a keymap alist which has the same format and
860meaning as @code{minor-mode-map-alist}, or a symbol with a variable
861binding which is such an alist. The ``active'' keymaps in each alist
862are used before @code{minor-mode-map-alist} and
863@code{minor-mode-overriding-map-alist}.
864@end defvar
865
87b2d5ff
RS
866@node Key Lookup
867@section Key Lookup
868@cindex key lookup
869@cindex keymap entry
73804d4b 870
87b2d5ff 871 @dfn{Key lookup} is the process of finding the binding of a key
59e58738
RS
872sequence from a given keymap. The execution or use of the binding is
873not part of key lookup.
73804d4b 874
f9f59935
RS
875 Key lookup uses just the event type of each event in the key sequence;
876the rest of the event is ignored. In fact, a key sequence used for key
8a36c244
RS
877lookup may designate a mouse event with just its types (a symbol)
878instead of the entire event (a list). @xref{Input Events}. Such
59e58738 879a ``key sequence'' is insufficient for @code{command-execute} to run,
f9f59935 880but it is sufficient for looking up or rebinding a key.
73804d4b 881
87b2d5ff
RS
882 When the key sequence consists of multiple events, key lookup
883processes the events sequentially: the binding of the first event is
884found, and must be a keymap; then the second event's binding is found in
885that keymap, and so on until all the events in the key sequence are used
886up. (The binding thus found for the last event may or may not be a
887keymap.) Thus, the process of key lookup is defined in terms of a
888simpler process for looking up a single event in a keymap. How that is
889done depends on the type of object associated with the event in that
890keymap.
73804d4b 891
87b2d5ff
RS
892 Let's use the term @dfn{keymap entry} to describe the value found by
893looking up an event type in a keymap. (This doesn't include the item
969fe9b5 894string and other extra elements in menu key bindings, because
87b2d5ff
RS
895@code{lookup-key} and other key lookup functions don't include them in
896the returned value.) While any Lisp object may be stored in a keymap as
969fe9b5 897a keymap entry, not all make sense for key lookup. Here is a table of
87b2d5ff 898the meaningful kinds of keymap entries:
73804d4b 899
87b2d5ff
RS
900@table @asis
901@item @code{nil}
902@cindex @code{nil} in keymap
903@code{nil} means that the events used so far in the lookup form an
904undefined key. When a keymap fails to mention an event type at all, and
905has no default binding, that is equivalent to a binding of @code{nil}
906for that event type.
73804d4b 907
87b2d5ff
RS
908@item @var{command}
909@cindex command in keymap
910The events used so far in the lookup form a complete key,
911and @var{command} is its binding. @xref{What Is a Function}.
73804d4b 912
bfe721d1 913@item @var{array}
87b2d5ff 914@cindex string in keymap
bfe721d1
KH
915The array (either a string or a vector) is a keyboard macro. The events
916used so far in the lookup form a complete key, and the array is its
917binding. See @ref{Keyboard Macros}, for more information.
73804d4b 918
969fe9b5
RS
919@item @var{keymap}
920@cindex keymap in keymap
921The events used so far in the lookup form a prefix key. The next
922event of the key sequence is looked up in @var{keymap}.
923
87b2d5ff
RS
924@item @var{list}
925@cindex list in keymap
926The meaning of a list depends on the types of the elements of the list.
73804d4b 927
87b2d5ff
RS
928@itemize @bullet
929@item
930If the @sc{car} of @var{list} is the symbol @code{keymap}, then the list
931is a keymap, and is treated as a keymap (see above).
73804d4b 932
87b2d5ff
RS
933@item
934@cindex @code{lambda} in keymap
935If the @sc{car} of @var{list} is @code{lambda}, then the list is a
936lambda expression. This is presumed to be a command, and is treated as
937such (see above).
73804d4b 938
87b2d5ff
RS
939@item
940If the @sc{car} of @var{list} is a keymap and the @sc{cdr} is an event
941type, then this is an @dfn{indirect entry}:
73804d4b
RS
942
943@example
87b2d5ff 944(@var{othermap} . @var{othertype})
73804d4b
RS
945@end example
946
87b2d5ff
RS
947When key lookup encounters an indirect entry, it looks up instead the
948binding of @var{othertype} in @var{othermap} and uses that.
73804d4b 949
87b2d5ff
RS
950This feature permits you to define one key as an alias for another key.
951For example, an entry whose @sc{car} is the keymap called @code{esc-map}
bfe721d1 952and whose @sc{cdr} is 32 (the code for @key{SPC}) means, ``Use the global
87b2d5ff
RS
953binding of @kbd{Meta-@key{SPC}}, whatever that may be.''
954@end itemize
73804d4b 955
87b2d5ff
RS
956@item @var{symbol}
957@cindex symbol in keymap
958The function definition of @var{symbol} is used in place of
959@var{symbol}. If that too is a symbol, then this process is repeated,
960any number of times. Ultimately this should lead to an object that is
f9f59935 961a keymap, a command, or a keyboard macro. A list is allowed if it is a
87b2d5ff
RS
962keymap or a command, but indirect entries are not understood when found
963via symbols.
73804d4b 964
87b2d5ff
RS
965Note that keymaps and keyboard macros (strings and vectors) are not
966valid functions, so a symbol with a keymap, string, or vector as its
967function definition is invalid as a function. It is, however, valid as
968a key binding. If the definition is a keyboard macro, then the symbol
969is also valid as an argument to @code{command-execute}
970(@pxref{Interactive Call}).
73804d4b 971
87b2d5ff
RS
972@cindex @code{undefined} in keymap
973The symbol @code{undefined} is worth special mention: it means to treat
974the key as undefined. Strictly speaking, the key is defined, and its
975binding is the command @code{undefined}; but that command does the same
976thing that is done automatically for an undefined key: it rings the bell
977(by calling @code{ding}) but does not signal an error.
73804d4b 978
87b2d5ff
RS
979@cindex preventing prefix key
980@code{undefined} is used in local keymaps to override a global key
981binding and make the key ``undefined'' locally. A local binding of
982@code{nil} would fail to do this because it would not override the
983global binding.
984
985@item @var{anything else}
986If any other type of object is found, the events used so far in the
987lookup form a complete key, and the object is its binding, but the
988binding is not executable as a command.
989@end table
990
991 In short, a keymap entry may be a keymap, a command, a keyboard macro,
992a symbol that leads to one of them, or an indirection or @code{nil}.
993Here is an example of a sparse keymap with two characters bound to
994commands and one bound to another keymap. This map is the normal value
995of @code{emacs-lisp-mode-map}. Note that 9 is the code for @key{TAB},
996127 for @key{DEL}, 27 for @key{ESC}, 17 for @kbd{C-q} and 24 for
997@kbd{C-x}.
73804d4b
RS
998
999@example
87b2d5ff
RS
1000@group
1001(keymap (9 . lisp-indent-line)
1002 (127 . backward-delete-char-untabify)
1003 (27 keymap (17 . indent-sexp) (24 . eval-defun)))
1004@end group
73804d4b
RS
1005@end example
1006
87b2d5ff
RS
1007@node Functions for Key Lookup
1008@section Functions for Key Lookup
73804d4b 1009
87b2d5ff 1010 Here are the functions and variables pertaining to key lookup.
73804d4b 1011
87b2d5ff 1012@defun lookup-key keymap key &optional accept-defaults
969fe9b5
RS
1013This function returns the definition of @var{key} in @var{keymap}. All
1014the other functions described in this chapter that look up keys use
1015@code{lookup-key}. Here are examples:
73804d4b 1016
87b2d5ff
RS
1017@example
1018@group
1019(lookup-key (current-global-map) "\C-x\C-f")
1020 @result{} find-file
1021@end group
1022@group
402fe423
RS
1023(lookup-key (current-global-map) (kbd "C-x C-f"))
1024 @result{} find-file
1025@end group
1026@group
87b2d5ff
RS
1027(lookup-key (current-global-map) "\C-x\C-f12345")
1028 @result{} 2
1029@end group
1030@end example
73804d4b 1031
969fe9b5
RS
1032If the string or vector @var{key} is not a valid key sequence according
1033to the prefix keys specified in @var{keymap}, it must be ``too long''
1034and have extra events at the end that do not fit into a single key
1035sequence. Then the value is a number, the number of events at the front
1036of @var{key} that compose a complete key.
1037
1038@c Emacs 19 feature
1039If @var{accept-defaults} is non-@code{nil}, then @code{lookup-key}
1040considers default bindings as well as bindings for the specific events
1041in @var{key}. Otherwise, @code{lookup-key} reports only bindings for
1042the specific sequence @var{key}, ignoring default bindings except when
1043you explicitly ask about them. (To do this, supply @code{t} as an
1044element of @var{key}; see @ref{Format of Keymaps}.)
1045
5f1f5955
GM
1046If @var{key} contains a meta character (not a function key), that
1047character is implicitly replaced by a two-character sequence: the value
1048of @code{meta-prefix-char}, followed by the corresponding non-meta
87b2d5ff
RS
1049character. Thus, the first example below is handled by conversion into
1050the second example.
73804d4b
RS
1051
1052@example
1053@group
87b2d5ff
RS
1054(lookup-key (current-global-map) "\M-f")
1055 @result{} forward-word
1056@end group
1057@group
1058(lookup-key (current-global-map) "\ef")
1059 @result{} forward-word
73804d4b
RS
1060@end group
1061@end example
87b2d5ff
RS
1062
1063Unlike @code{read-key-sequence}, this function does not modify the
1064specified events in ways that discard information (@pxref{Key Sequence
1065Input}). In particular, it does not convert letters to lower case and
1066it does not change drag events to clicks.
73804d4b
RS
1067@end defun
1068
87b2d5ff
RS
1069@deffn Command undefined
1070Used in keymaps to undefine keys. It calls @code{ding}, but does
1071not cause an error.
1072@end deffn
1073
87b2d5ff
RS
1074@defun local-key-binding key &optional accept-defaults
1075This function returns the binding for @var{key} in the current
1076local keymap, or @code{nil} if it is undefined there.
73804d4b 1077
87b2d5ff
RS
1078@c Emacs 19 feature
1079The argument @var{accept-defaults} controls checking for default bindings,
1080as in @code{lookup-key} (above).
73804d4b
RS
1081@end defun
1082
87b2d5ff
RS
1083@defun global-key-binding key &optional accept-defaults
1084This function returns the binding for command @var{key} in the
1085current global keymap, or @code{nil} if it is undefined there.
73804d4b
RS
1086
1087@c Emacs 19 feature
87b2d5ff
RS
1088The argument @var{accept-defaults} controls checking for default bindings,
1089as in @code{lookup-key} (above).
1090@end defun
73804d4b 1091
87b2d5ff
RS
1092@c Emacs 19 feature
1093@defun minor-mode-key-binding key &optional accept-defaults
1094This function returns a list of all the active minor mode bindings of
1095@var{key}. More precisely, it returns an alist of pairs
1096@code{(@var{modename} . @var{binding})}, where @var{modename} is the
1097variable that enables the minor mode, and @var{binding} is @var{key}'s
1098binding in that mode. If @var{key} has no minor-mode bindings, the
1099value is @code{nil}.
73804d4b 1100
f9f59935
RS
1101If the first binding found is not a prefix definition (a keymap or a
1102symbol defined as a keymap), all subsequent bindings from other minor
1103modes are omitted, since they would be completely shadowed. Similarly,
1104the list omits non-prefix bindings that follow prefix bindings.
73804d4b 1105
87b2d5ff
RS
1106The argument @var{accept-defaults} controls checking for default
1107bindings, as in @code{lookup-key} (above).
1108@end defun
73804d4b 1109
87b2d5ff
RS
1110@defvar meta-prefix-char
1111@cindex @key{ESC}
59e58738 1112This variable is the meta-prefix character code. It is used for
87b2d5ff 1113translating a meta character to a two-character sequence so it can be
59e58738
RS
1114looked up in a keymap. For useful results, the value should be a
1115prefix event (@pxref{Prefix Keys}). The default value is 27, which is
1116the @acronym{ASCII} code for @key{ESC}.
73804d4b 1117
5f1f5955
GM
1118As long as the value of @code{meta-prefix-char} remains 27, key lookup
1119translates @kbd{M-b} into @kbd{@key{ESC} b}, which is normally defined
1120as the @code{backward-word} command. However, if you were to set
87b2d5ff
RS
1121@code{meta-prefix-char} to 24, the code for @kbd{C-x}, then Emacs will
1122translate @kbd{M-b} into @kbd{C-x b}, whose standard binding is the
5f1f5955
GM
1123@code{switch-to-buffer} command. (Don't actually do this!) Here is an
1124illustration of what would happen:
73804d4b 1125
87b2d5ff
RS
1126@smallexample
1127@group
1128meta-prefix-char ; @r{The default value.}
1129 @result{} 27
1130@end group
1131@group
1132(key-binding "\M-b")
1133 @result{} backward-word
1134@end group
1135@group
1136?\C-x ; @r{The print representation}
1137 @result{} 24 ; @r{of a character.}
1138@end group
1139@group
1140(setq meta-prefix-char 24)
177c0ea7 1141 @result{} 24
87b2d5ff
RS
1142@end group
1143@group
1144(key-binding "\M-b")
1145 @result{} switch-to-buffer ; @r{Now, typing @kbd{M-b} is}
1146 ; @r{like typing @kbd{C-x b}.}
73804d4b 1147
87b2d5ff
RS
1148(setq meta-prefix-char 27) ; @r{Avoid confusion!}
1149 @result{} 27 ; @r{Restore the default value!}
1150@end group
1151@end smallexample
5f1f5955
GM
1152
1153This translation of one event into two happens only for characters, not
1154for other kinds of input events. Thus, @kbd{M-@key{F1}}, a function
1155key, is not converted into @kbd{@key{ESC} @key{F1}}.
73804d4b
RS
1156@end defvar
1157
87b2d5ff
RS
1158@node Changing Key Bindings
1159@section Changing Key Bindings
1160@cindex changing key bindings
1161@cindex rebinding
73804d4b 1162
87b2d5ff
RS
1163 The way to rebind a key is to change its entry in a keymap. If you
1164change a binding in the global keymap, the change is effective in all
1165buffers (though it has no direct effect in buffers that shadow the
1166global binding with a local one). If you change the current buffer's
1167local map, that usually affects all buffers using the same major mode.
1168The @code{global-set-key} and @code{local-set-key} functions are
1169convenient interfaces for these operations (@pxref{Key Binding
1170Commands}). You can also use @code{define-key}, a more general
1171function; then you must specify explicitly the map to change.
73804d4b 1172
87b2d5ff
RS
1173@cindex meta character key constants
1174@cindex control character key constants
1175 In writing the key sequence to rebind, it is good to use the special
1176escape sequences for control and meta characters (@pxref{String Type}).
1177The syntax @samp{\C-} means that the following character is a control
1178character and @samp{\M-} means that the following character is a meta
1179character. Thus, the string @code{"\M-x"} is read as containing a
1180single @kbd{M-x}, @code{"\C-f"} is read as containing a single
1181@kbd{C-f}, and @code{"\M-\C-x"} and @code{"\C-\M-x"} are both read as
1182containing a single @kbd{C-M-x}. You can also use this escape syntax in
1183vectors, as well as others that aren't allowed in strings; one example
1184is @samp{[?\C-\H-x home]}. @xref{Character Type}.
73804d4b 1185
22697dac
KH
1186 The key definition and lookup functions accept an alternate syntax for
1187event types in a key sequence that is a vector: you can use a list
1188containing modifier names plus one base event (a character or function
1189key name). For example, @code{(control ?a)} is equivalent to
1190@code{?\C-a} and @code{(hyper control left)} is equivalent to
969fe9b5
RS
1191@code{C-H-left}. One advantage of such lists is that the precise
1192numeric codes for the modifier bits don't appear in compiled files.
bfe721d1 1193
8a36c244
RS
1194 For the functions below, an error is signaled if @var{keymap} is not
1195a keymap or if @var{key} is not a string or vector representing a key
87b2d5ff 1196sequence. You can use event types (symbols) as shorthand for events
8a36c244
RS
1197that are lists. The @code{kbd} macro (@pxref{Keymap Terminology}) is
1198a convenient way to specify the key sequence.
73804d4b 1199
87b2d5ff
RS
1200@defun define-key keymap key binding
1201This function sets the binding for @var{key} in @var{keymap}. (If
1202@var{key} is more than one event long, the change is actually made
1203in another keymap reached from @var{keymap}.) The argument
1204@var{binding} can be any Lisp object, but only certain types are
1205meaningful. (For a list of meaningful types, see @ref{Key Lookup}.)
1206The value returned by @code{define-key} is @var{binding}.
73804d4b 1207
48bf63e3
RS
1208If @var{key} is @code{[t]}, this sets the default binding in
1209@var{keymap}. When an event has no binding of its own, the Emacs
1210command loop uses the keymap's default binding, if there is one.
1211
87b2d5ff
RS
1212@cindex invalid prefix key error
1213@cindex key sequence error
969fe9b5
RS
1214Every prefix of @var{key} must be a prefix key (i.e., bound to a keymap)
1215or undefined; otherwise an error is signaled. If some prefix of
1216@var{key} is undefined, then @code{define-key} defines it as a prefix
1217key so that the rest of @var{key} can be defined as specified.
f9f59935
RS
1218
1219If there was previously no binding for @var{key} in @var{keymap}, the
1220new binding is added at the beginning of @var{keymap}. The order of
48bf63e3
RS
1221bindings in a keymap makes no difference for keyboard input, but it
1222does matter for menu keymaps (@pxref{Menu Keymaps}).
87b2d5ff 1223@end defun
73804d4b 1224
87b2d5ff
RS
1225 Here is an example that creates a sparse keymap and makes a number of
1226bindings in it:
73804d4b 1227
87b2d5ff 1228@smallexample
73804d4b 1229@group
87b2d5ff
RS
1230(setq map (make-sparse-keymap))
1231 @result{} (keymap)
73804d4b 1232@end group
73804d4b 1233@group
87b2d5ff
RS
1234(define-key map "\C-f" 'forward-char)
1235 @result{} forward-char
73804d4b
RS
1236@end group
1237@group
87b2d5ff
RS
1238map
1239 @result{} (keymap (6 . forward-char))
73804d4b 1240@end group
73804d4b 1241
73804d4b 1242@group
87b2d5ff 1243;; @r{Build sparse submap for @kbd{C-x} and bind @kbd{f} in that.}
402fe423 1244(define-key map (kbd "C-x f") 'forward-word)
73804d4b
RS
1245 @result{} forward-word
1246@end group
1247@group
87b2d5ff 1248map
177c0ea7 1249@result{} (keymap
87b2d5ff
RS
1250 (24 keymap ; @kbd{C-x}
1251 (102 . forward-word)) ; @kbd{f}
1252 (6 . forward-char)) ; @kbd{C-f}
73804d4b 1253@end group
73804d4b 1254
87b2d5ff
RS
1255@group
1256;; @r{Bind @kbd{C-p} to the @code{ctl-x-map}.}
402fe423 1257(define-key map (kbd "C-p") ctl-x-map)
87b2d5ff 1258;; @code{ctl-x-map}
177c0ea7 1259@result{} [nil @dots{} find-file @dots{} backward-kill-sentence]
87b2d5ff 1260@end group
73804d4b 1261
73804d4b 1262@group
87b2d5ff 1263;; @r{Bind @kbd{C-f} to @code{foo} in the @code{ctl-x-map}.}
402fe423 1264(define-key map (kbd "C-p C-f") 'foo)
87b2d5ff 1265@result{} 'foo
73804d4b 1266@end group
87b2d5ff
RS
1267@group
1268map
1269@result{} (keymap ; @r{Note @code{foo} in @code{ctl-x-map}.}
1270 (16 keymap [nil @dots{} foo @dots{} backward-kill-sentence])
177c0ea7 1271 (24 keymap
87b2d5ff
RS
1272 (102 . forward-word))
1273 (6 . forward-char))
1274@end group
1275@end smallexample
73804d4b 1276
87b2d5ff
RS
1277@noindent
1278Note that storing a new binding for @kbd{C-p C-f} actually works by
1279changing an entry in @code{ctl-x-map}, and this has the effect of
1280changing the bindings of both @kbd{C-p C-f} and @kbd{C-x C-f} in the
1281default global map.
73804d4b 1282
229644e7 1283 The function @code{substitute-key-definition} scans a keymap for
db8af011 1284keys that have a certain binding and rebinds them with a different
229644e7
RS
1285binding. Another feature you can use for similar effects, but which
1286is often cleaner, is to add a binding that remaps a command
1287(@pxref{Remapping Commands}).
1288
87b2d5ff
RS
1289@defun substitute-key-definition olddef newdef keymap &optional oldmap
1290@cindex replace bindings
1291This function replaces @var{olddef} with @var{newdef} for any keys in
1292@var{keymap} that were bound to @var{olddef}. In other words,
1293@var{olddef} is replaced with @var{newdef} wherever it appears. The
1294function returns @code{nil}.
73804d4b 1295
87b2d5ff
RS
1296For example, this redefines @kbd{C-x C-f}, if you do it in an Emacs with
1297standard bindings:
73804d4b 1298
87b2d5ff
RS
1299@smallexample
1300@group
177c0ea7 1301(substitute-key-definition
87b2d5ff
RS
1302 'find-file 'find-file-read-only (current-global-map))
1303@end group
1304@end smallexample
73804d4b
RS
1305
1306@c Emacs 19 feature
a0a1df48
GM
1307If @var{oldmap} is non-@code{nil}, that changes the behavior of
1308@code{substitute-key-definition}: the bindings in @var{oldmap} determine
1309which keys to rebind. The rebindings still happen in @var{keymap}, not
1310in @var{oldmap}. Thus, you can change one map under the control of the
87b2d5ff 1311bindings in another. For example,
73804d4b 1312
87b2d5ff
RS
1313@smallexample
1314(substitute-key-definition
1315 'delete-backward-char 'my-funny-delete
1316 my-map global-map)
1317@end smallexample
73804d4b 1318
87b2d5ff
RS
1319@noindent
1320puts the special deletion command in @code{my-map} for whichever keys
1321are globally bound to the standard deletion command.
73804d4b 1322
87b2d5ff 1323Here is an example showing a keymap before and after substitution:
73804d4b
RS
1324
1325@smallexample
1326@group
177c0ea7
JB
1327(setq map '(keymap
1328 (?1 . olddef-1)
1329 (?2 . olddef-2)
73804d4b
RS
1330 (?3 . olddef-1)))
1331@result{} (keymap (49 . olddef-1) (50 . olddef-2) (51 . olddef-1))
1332@end group
1333
1334@group
1335(substitute-key-definition 'olddef-1 'newdef map)
1336@result{} nil
1337@end group
1338@group
1339map
1340@result{} (keymap (49 . newdef) (50 . olddef-2) (51 . newdef))
1341@end group
1342@end smallexample
1343@end defun
1344
1345@defun suppress-keymap keymap &optional nodigits
1346@cindex @code{self-insert-command} override
1347This function changes the contents of the full keymap @var{keymap} by
cd7e5dd6
LT
1348remapping @code{self-insert-command} to the command @code{undefined}
1349(@pxref{Remapping Commands}). This has the effect of undefining all
1350printing characters, thus making ordinary insertion of text impossible.
1351@code{suppress-keymap} returns @code{nil}.
73804d4b
RS
1352
1353If @var{nodigits} is @code{nil}, then @code{suppress-keymap} defines
1354digits to run @code{digit-argument}, and @kbd{-} to run
1355@code{negative-argument}. Otherwise it makes them undefined like the
1356rest of the printing characters.
1357
177c0ea7
JB
1358@cindex yank suppression
1359@cindex @code{quoted-insert} suppression
73804d4b
RS
1360The @code{suppress-keymap} function does not make it impossible to
1361modify a buffer, as it does not suppress commands such as @code{yank}
1362and @code{quoted-insert}. To prevent any modification of a buffer, make
1363it read-only (@pxref{Read Only Buffers}).
1364
1365Since this function modifies @var{keymap}, you would normally use it
1366on a newly created keymap. Operating on an existing keymap
1367that is used for some other purpose is likely to cause trouble; for
1368example, suppressing @code{global-map} would make it impossible to use
1369most of Emacs.
1370
1371Most often, @code{suppress-keymap} is used to initialize local
1372keymaps of modes such as Rmail and Dired where insertion of text is not
1373desirable and the buffer is read-only. Here is an example taken from
1374the file @file{emacs/lisp/dired.el}, showing how the local keymap for
1375Dired mode is set up:
1376
1377@smallexample
1378@group
1911e6e5
RS
1379(setq dired-mode-map (make-keymap))
1380(suppress-keymap dired-mode-map)
1381(define-key dired-mode-map "r" 'dired-rename-file)
1382(define-key dired-mode-map "\C-d" 'dired-flag-file-deleted)
1383(define-key dired-mode-map "d" 'dired-flag-file-deleted)
1384(define-key dired-mode-map "v" 'dired-view-file)
1385(define-key dired-mode-map "e" 'dired-find-file)
1386(define-key dired-mode-map "f" 'dired-find-file)
1387@dots{}
73804d4b
RS
1388@end group
1389@end smallexample
1390@end defun
1391
229644e7
RS
1392@node Remapping Commands
1393@section Remapping Commands
1394@cindex remapping commands
1395
1396 A special kind of key binding, using a special ``key sequence''
1397which includes a command name, has the effect of @dfn{remapping} that
1398command into another. Here's how it works. You make a key binding
b0110b4a 1399for a key sequence that starts with the dummy event @code{remap},
229644e7
RS
1400followed by the command name you want to remap. Specify the remapped
1401definition as the definition in this binding. The remapped definition
1402is usually a command name, but it can be any valid definition for
1403a key binding.
1404
1405 Here's an example. Suppose that My mode uses special commands
1406@code{my-kill-line} and @code{my-kill-word}, which should be invoked
1407instead of @code{kill-line} and @code{kill-word}. It can establish
1408this by making these two command-remapping bindings in its keymap:
1409
342fd6cd 1410@smallexample
229644e7
RS
1411(define-key my-mode-map [remap kill-line] 'my-kill-line)
1412(define-key my-mode-map [remap kill-word] 'my-kill-word)
342fd6cd 1413@end smallexample
229644e7
RS
1414
1415Whenever @code{my-mode-map} is an active keymap, if the user types
1416@kbd{C-k}, Emacs will find the standard global binding of
1417@code{kill-line} (assuming nobody has changed it). But
db8af011 1418@code{my-mode-map} remaps @code{kill-line} to @code{my-kill-line},
229644e7
RS
1419so instead of running @code{kill-line}, Emacs runs
1420@code{my-kill-line}.
1421
1422Remapping only works through a single level. In other words,
1423
342fd6cd 1424@smallexample
229644e7
RS
1425(define-key my-mode-map [remap kill-line] 'my-kill-line)
1426(define-key my-mode-map [remap my-kill-line] 'my-other-kill-line)
342fd6cd 1427@end smallexample
229644e7
RS
1428
1429@noindent
1430does not have the effect of remapping @code{kill-line} into
db8af011 1431@code{my-other-kill-line}. If an ordinary key binding specifies
229644e7
RS
1432@code{kill-line}, this keymap will remap it to @code{my-kill-line};
1433if an ordinary binding specifies @code{my-kill-line}, this keymap will
1434remap it to @code{my-other-kill-line}.
1435
1436@defun command-remapping command
db8af011
LT
1437This function returns the remapping for @var{command} (a symbol),
1438given the current active keymaps. If @var{command} is not remapped
1439(which is the usual situation), or not a symbol, the function returns
1440@code{nil}.
229644e7
RS
1441@end defun
1442
73804d4b
RS
1443@node Key Binding Commands
1444@section Commands for Binding Keys
1445
1446 This section describes some convenient interactive interfaces for
1447changing key bindings. They work by calling @code{define-key}.
1448
a40d4712
PR
1449 People often use @code{global-set-key} in their init files
1450(@pxref{Init File}) for simple customization. For example,
87b2d5ff
RS
1451
1452@smallexample
402fe423 1453(global-set-key (kbd "C-x C-\\") 'next-line)
87b2d5ff
RS
1454@end smallexample
1455
1456@noindent
1457or
1458
1459@smallexample
1460(global-set-key [?\C-x ?\C-\\] 'next-line)
1461@end smallexample
1462
bfe721d1
KH
1463@noindent
1464or
1465
1466@smallexample
1467(global-set-key [(control ?x) (control ?\\)] 'next-line)
1468@end smallexample
1469
87b2d5ff
RS
1470@noindent
1471redefines @kbd{C-x C-\} to move down a line.
1472
1473@smallexample
1474(global-set-key [M-mouse-1] 'mouse-set-point)
1475@end smallexample
1476
1477@noindent
8a36c244 1478redefines the first (leftmost) mouse button, entered with the Meta key, to
87b2d5ff
RS
1479set point where you click.
1480
ad800164
EZ
1481@cindex non-@acronym{ASCII} text in keybindings
1482 Be careful when using non-@acronym{ASCII} text characters in Lisp
8241495d
RS
1483specifications of keys to bind. If these are read as multibyte text, as
1484they usually will be in a Lisp file (@pxref{Loading Non-ASCII}), you
1485must type the keys as multibyte too. For instance, if you use this:
1486
1487@smallexample
1488(global-set-key "@"o" 'my-function) ; bind o-umlaut
1489@end smallexample
1490
1491@noindent
1492or
1493
1494@smallexample
1495(global-set-key ?@"o 'my-function) ; bind o-umlaut
1496@end smallexample
1497
1498@noindent
1499and your language environment is multibyte Latin-1, these commands
1500actually bind the multibyte character with code 2294, not the unibyte
1501Latin-1 character with code 246 (@kbd{M-v}). In order to use this
1502binding, you need to enter the multibyte Latin-1 character as keyboard
1503input. One way to do this is by using an appropriate input method
db8af011 1504(@pxref{Input Methods, , Input Methods, emacs, The GNU Emacs Manual}).
8241495d
RS
1505
1506 If you want to use a unibyte character in the key binding, you can
1507construct the key sequence string using @code{multibyte-char-to-unibyte}
1508or @code{string-make-unibyte} (@pxref{Converting Representations}).
1509
b68f60d7 1510@deffn Command global-set-key key binding
87b2d5ff 1511This function sets the binding of @var{key} in the current global map
b68f60d7 1512to @var{binding}.
73804d4b
RS
1513
1514@smallexample
1515@group
b68f60d7 1516(global-set-key @var{key} @var{binding})
73804d4b 1517@equiv{}
b68f60d7 1518(define-key (current-global-map) @var{key} @var{binding})
73804d4b
RS
1519@end group
1520@end smallexample
1521@end deffn
1522
1523@deffn Command global-unset-key key
1524@cindex unbinding keys
87b2d5ff 1525This function removes the binding of @var{key} from the current
73804d4b
RS
1526global map.
1527
87b2d5ff
RS
1528One use of this function is in preparation for defining a longer key
1529that uses @var{key} as a prefix---which would not be allowed if
1530@var{key} has a non-prefix binding. For example:
1531
1532@smallexample
1533@group
1534(global-unset-key "\C-l")
1535 @result{} nil
1536@end group
1537@group
1538(global-set-key "\C-l\C-l" 'redraw-display)
1539 @result{} nil
1540@end group
1541@end smallexample
1542
1543This function is implemented simply using @code{define-key}:
1544
1545@smallexample
1546@group
1547(global-unset-key @var{key})
1548@equiv{}
1549(define-key (current-global-map) @var{key} nil)
1550@end group
1551@end smallexample
1552@end deffn
1553
b68f60d7 1554@deffn Command local-set-key key binding
87b2d5ff 1555This function sets the binding of @var{key} in the current local
b68f60d7 1556keymap to @var{binding}.
87b2d5ff
RS
1557
1558@smallexample
1559@group
b68f60d7 1560(local-set-key @var{key} @var{binding})
87b2d5ff 1561@equiv{}
b68f60d7 1562(define-key (current-local-map) @var{key} @var{binding})
87b2d5ff
RS
1563@end group
1564@end smallexample
1565@end deffn
1566
1567@deffn Command local-unset-key key
1568This function removes the binding of @var{key} from the current
1569local map.
1570
1571@smallexample
1572@group
1573(local-unset-key @var{key})
1574@equiv{}
1575(define-key (current-local-map) @var{key} nil)
1576@end group
1577@end smallexample
1578@end deffn
1579
1580@node Scanning Keymaps
1581@section Scanning Keymaps
1582
1583 This section describes functions used to scan all the current keymaps
1584for the sake of printing help information.
1585
1586@defun accessible-keymaps keymap &optional prefix
f9f59935
RS
1587This function returns a list of all the keymaps that can be reached (via
1588zero or more prefix keys) from @var{keymap}. The value is an
1589association list with elements of the form @code{(@var{key} .@:
1590@var{map})}, where @var{key} is a prefix key whose definition in
1591@var{keymap} is @var{map}.
87b2d5ff
RS
1592
1593The elements of the alist are ordered so that the @var{key} increases
db8af011 1594in length. The first element is always @code{([] .@: @var{keymap})},
87b2d5ff
RS
1595because the specified keymap is accessible from itself with a prefix of
1596no events.
1597
1598If @var{prefix} is given, it should be a prefix key sequence; then
1599@code{accessible-keymaps} includes only the submaps whose prefixes start
1600with @var{prefix}. These elements look just as they do in the value of
1601@code{(accessible-keymaps)}; the only difference is that some elements
1602are omitted.
1603
1604In the example below, the returned alist indicates that the key
1605@key{ESC}, which is displayed as @samp{^[}, is a prefix key whose
1606definition is the sparse keymap @code{(keymap (83 .@: center-paragraph)
1607(115 .@: foo))}.
1608
1609@smallexample
1610@group
1611(accessible-keymaps (current-local-map))
db8af011 1612@result{}(([] keymap
87b2d5ff
RS
1613 (27 keymap ; @r{Note this keymap for @key{ESC} is repeated below.}
1614 (83 . center-paragraph)
1615 (115 . center-line))
1616 (9 . tab-to-tab-stop))
1617@end group
1618
1619@group
177c0ea7
JB
1620 ("^[" keymap
1621 (83 . center-paragraph)
87b2d5ff
RS
1622 (115 . foo)))
1623@end group
1624@end smallexample
1625
1626In the following example, @kbd{C-h} is a prefix key that uses a sparse
1627keymap starting with @code{(keymap (118 . describe-variable)@dots{})}.
1628Another prefix, @kbd{C-x 4}, uses a keymap which is also the value of
1629the variable @code{ctl-x-4-map}. The event @code{mode-line} is one of
1630several dummy events used as prefixes for mouse actions in special parts
1631of a window.
1632
1633@smallexample
1634@group
1635(accessible-keymaps (current-global-map))
db8af011 1636@result{} (([] keymap [set-mark-command beginning-of-line @dots{}
87b2d5ff
RS
1637 delete-backward-char])
1638@end group
1639@group
1640 ("^H" keymap (118 . describe-variable) @dots{}
1641 (8 . help-for-help))
1642@end group
1643@group
1644 ("^X" keymap [x-flush-mouse-queue @dots{}
1645 backward-kill-sentence])
1646@end group
1647@group
1648 ("^[" keymap [mark-sexp backward-sexp @dots{}
1649 backward-kill-word])
1650@end group
1651 ("^X4" keymap (15 . display-buffer) @dots{})
1652@group
1653 ([mode-line] keymap
1654 (S-mouse-2 . mouse-split-window-horizontally) @dots{}))
1655@end group
1656@end smallexample
1657
1658@noindent
969fe9b5 1659These are not all the keymaps you would see in actuality.
87b2d5ff
RS
1660@end defun
1661
0f201864
RS
1662@defun map-keymap function keymap
1663The function @code{map-keymap} calls @var{function} once
1664for each binding in @var{keymap}. It passes two arguments,
1665the event type and the value of the binding. If @var{keymap}
1666has a parent, the parent's bindings are included as well.
db8af011
LT
1667This works recursively: if the parent has itself a parent, then the
1668grandparent's bindings are also included and so on.
0f201864
RS
1669
1670This function is the cleanest way to examine all the bindings
1671in a keymap.
1672@end defun
1673
229644e7 1674@defun where-is-internal command &optional keymap firstonly noindirect no-remap
f9f59935
RS
1675This function is a subroutine used by the @code{where-is} command
1676(@pxref{Help, , Help, emacs,The GNU Emacs Manual}). It returns a list
db8af011 1677of all key sequences (of any length) that are bound to @var{command} in a
f9f59935 1678set of keymaps.
87b2d5ff
RS
1679
1680The argument @var{command} can be any object; it is compared with all
1681keymap entries using @code{eq}.
1682
1683If @var{keymap} is @code{nil}, then the maps used are the current active
1684keymaps, disregarding @code{overriding-local-map} (that is, pretending
db8af011 1685its value is @code{nil}). If @var{keymap} is a keymap, then the
87d6dc14
EZ
1686maps searched are @var{keymap} and the global keymap. If @var{keymap}
1687is a list of keymaps, only those keymaps are searched.
87b2d5ff
RS
1688
1689Usually it's best to use @code{overriding-local-map} as the expression
1690for @var{keymap}. Then @code{where-is-internal} searches precisely the
1691keymaps that are active. To search only the global map, pass
1692@code{(keymap)} (an empty keymap) as @var{keymap}.
1693
1694If @var{firstonly} is @code{non-ascii}, then the value is a single
db8af011 1695vector representing the first key sequence found, rather than a list of
87b2d5ff
RS
1696all possible key sequences. If @var{firstonly} is @code{t}, then the
1697value is the first key sequence, except that key sequences consisting
ad800164 1698entirely of @acronym{ASCII} characters (or meta variants of @acronym{ASCII}
db8af011
LT
1699characters) are preferred to all other key sequences and that the
1700return value can never be a menu binding.
87b2d5ff
RS
1701
1702If @var{noindirect} is non-@code{nil}, @code{where-is-internal} doesn't
1703follow indirect keymap bindings. This makes it possible to search for
1704an indirect definition itself.
1705
229644e7
RS
1706When command remapping is in effect (@pxref{Remapping Commands}),
1707@code{where-is-internal} figures out when a command will be run due to
1708remapping and reports keys accordingly. It also returns @code{nil} if
1709@var{command} won't really be run because it has been remapped to some
1710other command. However, if @var{no-remap} is non-@code{nil}.
1711@code{where-is-internal} ignores remappings.
1712
87b2d5ff
RS
1713@smallexample
1714@group
1715(where-is-internal 'describe-function)
1716 @result{} ("\^hf" "\^hd")
1717@end group
1718@end smallexample
1719@end defun
1720
db8af011 1721@deffn Command describe-bindings &optional prefix buffer-or-name
969fe9b5
RS
1722This function creates a listing of all current key bindings, and
1723displays it in a buffer named @samp{*Help*}. The text is grouped by
1724modes---minor modes first, then the major mode, then global bindings.
87b2d5ff
RS
1725
1726If @var{prefix} is non-@code{nil}, it should be a prefix key; then the
1727listing includes only keys that start with @var{prefix}.
1728
1729The listing describes meta characters as @key{ESC} followed by the
1730corresponding non-meta character.
1731
ad800164 1732When several characters with consecutive @acronym{ASCII} codes have the
87b2d5ff
RS
1733same definition, they are shown together, as
1734@samp{@var{firstchar}..@var{lastchar}}. In this instance, you need to
ad800164 1735know the @acronym{ASCII} codes to understand which characters this means.
87b2d5ff 1736For example, in the default global map, the characters @samp{@key{SPC}
ad800164
EZ
1737..@: ~} are described by a single line. @key{SPC} is @acronym{ASCII} 32,
1738@kbd{~} is @acronym{ASCII} 126, and the characters between them include all
87b2d5ff
RS
1739the normal printing characters, (e.g., letters, digits, punctuation,
1740etc.@:); all these characters are bound to @code{self-insert-command}.
db8af011
LT
1741
1742If @var{buffer-or-name} is non-@code{nil}, it should be a buffer or a
1743buffer name. Then @code{describe-bindings} lists that buffer's bindings,
1744instead of the current buffer's.
87b2d5ff
RS
1745@end deffn
1746
1747@node Menu Keymaps
1748@section Menu Keymaps
1749@cindex menu keymaps
1750
1751@c Emacs 19 feature
1752A keymap can define a menu as well as bindings for keyboard keys and
1753mouse button. Menus are usually actuated with the mouse, but they can
1754work with the keyboard also.
1755
1756@menu
1757* Defining Menus:: How to make a keymap that defines a menu.
1758* Mouse Menus:: How users actuate the menu with the mouse.
1759* Keyboard Menus:: How they actuate it with the keyboard.
1760* Menu Example:: Making a simple menu.
1761* Menu Bar:: How to customize the menu bar.
8241495d 1762* Tool Bar:: A tool bar is a row of images.
87b2d5ff
RS
1763* Modifying Menus:: How to add new items to a menu.
1764@end menu
1765
1766@node Defining Menus
1767@subsection Defining Menus
1768@cindex defining menus
1769@cindex menu prompt string
1770@cindex prompt string (of menu)
1771
1772A keymap is suitable for menu use if it has an @dfn{overall prompt
1773string}, which is a string that appears as an element of the keymap.
1774(@xref{Format of Keymaps}.) The string should describe the purpose of
e465fdc2 1775the menu's commands. Emacs displays the overall prompt string as the
b08d86c6
DL
1776menu title in some cases, depending on the toolkit (if any) used for
1777displaying menus.@footnote{It is required for menus which do not use a
1778toolkit, e.g.@: under MS-DOS.} Keyboard menus also display the overall
1779prompt string.
e465fdc2
GM
1780
1781The easiest way to construct a keymap with a prompt string is to specify
b08d86c6 1782the string as an argument when you call @code{make-keymap},
db8af011
LT
1783@code{make-sparse-keymap} (@pxref{Creating Keymaps}), or
1784@code{define-prefix-command} (@pxref{Definition of define-prefix-command}).
1785
87b2d5ff 1786
0f201864
RS
1787@defun keymap-prompt keymap
1788This function returns the overall prompt string of @var{keymap},
1789or @code{nil} if it has none.
1790@end defun
1791
aae60c21
RS
1792The order of items in the menu is the same as the order of bindings in
1793the keymap. Since @code{define-key} puts new bindings at the front, you
1794should define the menu items starting at the bottom of the menu and
1795moving to the top, if you care about the order. When you add an item to
1796an existing menu, you can specify its position in the menu using
1797@code{define-key-after} (@pxref{Modifying Menus}).
1798
969fe9b5 1799@menu
a9f0a989
RS
1800* Simple Menu Items:: A simple kind of menu key binding,
1801 limited in capabilities.
a9f0a989
RS
1802* Extended Menu Items:: More powerful menu item definitions
1803 let you specify keywords to enable
1804 various features.
8241495d
RS
1805* Menu Separators:: Drawing a horizontal line through a menu.
1806* Alias Menu Items:: Using command aliases in menu items.
969fe9b5
RS
1807@end menu
1808
1809@node Simple Menu Items
1810@subsubsection Simple Menu Items
1811
1812 The simpler and older way to define a menu keymap binding
1813looks like this:
87b2d5ff
RS
1814
1815@example
969fe9b5 1816(@var{item-string} . @var{real-binding})
87b2d5ff
RS
1817@end example
1818
a9f0a989 1819@noindent
969fe9b5
RS
1820The @sc{car}, @var{item-string}, is the string to be displayed in the
1821menu. It should be short---preferably one to three words. It should
79dc1dfc 1822describe the action of the command it corresponds to. Note that it is
ad800164 1823not generally possible to display non-@acronym{ASCII} text in menus. It will
79dc1dfc 1824work for keyboard menus and will work to a large extent when Emacs is
8a36c244 1825built with the Gtk+ toolkit.@footnote{In this case, the text is first
79dc1dfc
DL
1826encoded using the @code{utf-8} coding system and then rendered by the
1827toolkit as it sees fit.}
87b2d5ff 1828
87b2d5ff
RS
1829You can also supply a second string, called the help string, as follows:
1830
1831@example
b08d86c6 1832(@var{item-string} @var{help} . @var{real-binding})
87b2d5ff
RS
1833@end example
1834
b08d86c6
DL
1835@var{help} specifies a ``help-echo'' string to display while the mouse
1836is on that item in the same way as @code{help-echo} text properties
1837(@pxref{Help display}).
87b2d5ff 1838
969fe9b5 1839As far as @code{define-key} is concerned, @var{item-string} and
0521d6f5
RS
1840@var{help-string} are part of the event's binding. However,
1841@code{lookup-key} returns just @var{real-binding}, and only
1842@var{real-binding} is used for executing the key.
1843
969fe9b5
RS
1844If @var{real-binding} is @code{nil}, then @var{item-string} appears in
1845the menu but cannot be selected.
87b2d5ff
RS
1846
1847If @var{real-binding} is a symbol and has a non-@code{nil}
1848@code{menu-enable} property, that property is an expression that
1849controls whether the menu item is enabled. Every time the keymap is
1850used to display a menu, Emacs evaluates the expression, and it enables
1851the menu item only if the expression's value is non-@code{nil}. When a
1852menu item is disabled, it is displayed in a ``fuzzy'' fashion, and
969fe9b5 1853cannot be selected.
87b2d5ff 1854
bfe721d1
KH
1855The menu bar does not recalculate which items are enabled every time you
1856look at a menu. This is because the X toolkit requires the whole tree
1857of menus in advance. To force recalculation of the menu bar, call
1858@code{force-mode-line-update} (@pxref{Mode Line Format}).
1859
0521d6f5
RS
1860You've probably noticed that menu items show the equivalent keyboard key
1861sequence (if any) to invoke the same command. To save time on
1862recalculation, menu display caches this information in a sublist in the
1863binding, like this:
1864
1865@c This line is not too long--rms.
1866@example
969fe9b5 1867(@var{item-string} @r{[}@var{help-string}@r{]} (@var{key-binding-data}) . @var{real-binding})
0521d6f5
RS
1868@end example
1869
969fe9b5 1870@noindent
0521d6f5 1871Don't put these sublists in the menu item yourself; menu display
969fe9b5
RS
1872calculates them automatically. Don't mention keyboard equivalents in
1873the item strings themselves, since that is redundant.
0521d6f5 1874
969fe9b5
RS
1875@node Extended Menu Items
1876@subsubsection Extended Menu Items
a9f0a989 1877@kindex menu-item
969fe9b5
RS
1878
1879 An extended-format menu item is a more flexible and also cleaner
1880alternative to the simple format. It consists of a list that starts
1881with the symbol @code{menu-item}. To define a non-selectable string,
1882the item looks like this:
1883
1884@example
1885(menu-item @var{item-name})
1886@end example
1887
1888@noindent
8241495d
RS
1889A string starting with two or more dashes specifies a separator line;
1890see @ref{Menu Separators}.
969fe9b5
RS
1891
1892 To define a real menu item which can be selected, the extended format
1893item looks like this:
1894
1895@example
1896(menu-item @var{item-name} @var{real-binding}
1897 . @var{item-property-list})
1898@end example
1899
1900@noindent
1901Here, @var{item-name} is an expression which evaluates to the menu item
1902string. Thus, the string need not be a constant. The third element,
1903@var{real-binding}, is the command to execute. The tail of the list,
1904@var{item-property-list}, has the form of a property list which contains
1905other information. Here is a table of the properties that are supported:
1906
1907@table @code
8241495d 1908@item :enable @var{form}
969fe9b5 1909The result of evaluating @var{form} determines whether the item is
8241495d
RS
1910enabled (non-@code{nil} means yes). If the item is not enabled,
1911you can't really click on it.
969fe9b5 1912
8241495d 1913@item :visible @var{form}
969fe9b5
RS
1914The result of evaluating @var{form} determines whether the item should
1915actually appear in the menu (non-@code{nil} means yes). If the item
1916does not appear, then the menu is displayed as if this item were
1917not defined at all.
1918
1919@item :help @var{help}
b08d86c6
DL
1920The value of this property, @var{help}, specifies a ``help-echo'' string
1921to display while the mouse is on that item. This is displayed in the
1922same way as @code{help-echo} text properties (@pxref{Help display}).
1923Note that this must be a constant string, unlike the @code{help-echo}
1924property for text and overlays.
969fe9b5
RS
1925
1926@item :button (@var{type} . @var{selected})
1927This property provides a way to define radio buttons and toggle buttons.
a40d4712 1928The @sc{car}, @var{type}, says which: it should be @code{:toggle} or
969fe9b5
RS
1929@code{:radio}. The @sc{cdr}, @var{selected}, should be a form; the
1930result of evaluating it says whether this button is currently selected.
1931
a9f0a989
RS
1932A @dfn{toggle} is a menu item which is labeled as either ``on'' or ``off''
1933according to the value of @var{selected}. The command itself should
1934toggle @var{selected}, setting it to @code{t} if it is @code{nil},
1935and to @code{nil} if it is @code{t}. Here is how the menu item
1936to toggle the @code{debug-on-error} flag is defined:
1937
1938@example
1939(menu-item "Debug on Error" toggle-debug-on-error
1940 :button (:toggle
1941 . (and (boundp 'debug-on-error)
08f0f5e9 1942 debug-on-error)))
a9f0a989
RS
1943@end example
1944
1945@noindent
1946This works because @code{toggle-debug-on-error} is defined as a command
1947which toggles the variable @code{debug-on-error}.
1948
1949@dfn{Radio buttons} are a group of menu items, in which at any time one
1950and only one is ``selected.'' There should be a variable whose value
1951says which one is selected at any time. The @var{selected} form for
1952each radio button in the group should check whether the variable has the
1953right value for selecting that button. Clicking on the button should
1954set the variable so that the button you clicked on becomes selected.
1955
1956@item :key-sequence @var{key-sequence}
1957This property specifies which key sequence is likely to be bound to the
1958same command invoked by this menu item. If you specify the right key
1959sequence, that makes preparing the menu for display run much faster.
1960
1961If you specify the wrong key sequence, it has no effect; before Emacs
1962displays @var{key-sequence} in the menu, it verifies that
1963@var{key-sequence} is really equivalent to this menu item.
1964
1965@item :key-sequence nil
1966This property indicates that there is normally no key binding which is
1967equivalent to this menu item. Using this property saves time in
1968preparing the menu for display, because Emacs does not need to search
1969the keymaps for a keyboard equivalent for this menu item.
1970
1971However, if the user has rebound this item's definition to a key
1972sequence, Emacs ignores the @code{:keys} property and finds the keyboard
1973equivalent anyway.
1974
1975@item :keys @var{string}
1976This property specifies that @var{string} is the string to display
1977as the keyboard equivalent for this menu item. You can use
1978the @samp{\\[...]} documentation construct in @var{string}.
1979
969fe9b5
RS
1980@item :filter @var{filter-fn}
1981This property provides a way to compute the menu item dynamically.
1982The property value @var{filter-fn} should be a function of one argument;
1983when it is called, its argument will be @var{real-binding}. The
1984function should return the binding to use instead.
bf58181a
RS
1985
1986Emacs can call this function at any time that it does redisplay or
1987operates on menu data structures, so you should write it so it can
1988safely be called at any time.
969fe9b5
RS
1989@end table
1990
8241495d
RS
1991@node Menu Separators
1992@subsubsection Menu Separators
1993@cindex menu separators
1994
1995 A menu separator is a kind of menu item that doesn't display any
4810d170 1996text---instead, it divides the menu into subparts with a horizontal line.
8241495d
RS
1997A separator looks like this in the menu keymap:
1998
1999@example
2000(menu-item @var{separator-type})
2001@end example
2002
2003@noindent
2004where @var{separator-type} is a string starting with two or more dashes.
2005
2006 In the simplest case, @var{separator-type} consists of only dashes.
2007That specifies the default kind of separator. (For compatibility,
2008@code{""} and @code{-} also count as separators.)
2009
35c14f98
RS
2010 Certain other values of @var{separator-type} specify a different
2011style of separator. Here is a table of them:
8241495d
RS
2012
2013@table @code
2014@item "--no-line"
2015@itemx "--space"
2016An extra vertical space, with no actual line.
2017
2018@item "--single-line"
2019A single line in the menu's foreground color.
2020
2021@item "--double-line"
2022A double line in the menu's foreground color.
2023
2024@item "--single-dashed-line"
2025A single dashed line in the menu's foreground color.
2026
2027@item "--double-dashed-line"
2028A double dashed line in the menu's foreground color.
2029
2030@item "--shadow-etched-in"
2031A single line with a 3D sunken appearance. This is the default,
2032used separators consisting of dashes only.
2033
2034@item "--shadow-etched-out"
2035A single line with a 3D raised appearance.
2036
2037@item "--shadow-etched-in-dash"
2038A single dashed line with a 3D sunken appearance.
2039
2040@item "--shadow-etched-out-dash"
2041A single dashed line with a 3D raised appearance.
2042
2043@item "--shadow-double-etched-in"
2044Two lines with a 3D sunken appearance.
2045
2046@item "--shadow-double-etched-out"
2047Two lines with a 3D raised appearance.
2048
2049@item "--shadow-double-etched-in-dash"
2050Two dashed lines with a 3D sunken appearance.
2051
2052@item "--shadow-double-etched-out-dash"
2053Two dashed lines with a 3D raised appearance.
2054@end table
2055
2056 You can also give these names in another style, adding a colon after
2057the double-dash and replacing each single dash with capitalization of
2058the following word. Thus, @code{"--:singleLine"}, is equivalent to
2059@code{"--single-line"}.
2060
2061 Some systems and display toolkits don't really handle all of these
2062separator types. If you use a type that isn't supported, the menu
2063displays a similar kind of separator that is supported.
2064
a9f0a989
RS
2065@node Alias Menu Items
2066@subsubsection Alias Menu Items
2067
2068 Sometimes it is useful to make menu items that use the ``same''
2069command but with different enable conditions. The best way to do this
2070in Emacs now is with extended menu items; before that feature existed,
2071it could be done by defining alias commands and using them in menu
2072items. Here's an example that makes two aliases for
2073@code{toggle-read-only} and gives them different enable conditions:
2074
2075@example
2076(defalias 'make-read-only 'toggle-read-only)
2077(put 'make-read-only 'menu-enable '(not buffer-read-only))
2078(defalias 'make-writable 'toggle-read-only)
2079(put 'make-writable 'menu-enable 'buffer-read-only)
2080@end example
2081
2082When using aliases in menus, often it is useful to display the
2083equivalent key bindings for the ``real'' command name, not the aliases
2084(which typically don't have any key bindings except for the menu
2085itself). To request this, give the alias symbol a non-@code{nil}
2086@code{menu-alias} property. Thus,
2087
2088@example
2089(put 'make-read-only 'menu-alias t)
2090(put 'make-writable 'menu-alias t)
2091@end example
2092
2093@noindent
2094causes menu items for @code{make-read-only} and @code{make-writable} to
2095show the keyboard bindings for @code{toggle-read-only}.
2096
87b2d5ff
RS
2097@node Mouse Menus
2098@subsection Menus and the Mouse
2099
969fe9b5
RS
2100 The usual way to make a menu keymap produce a menu is to make it the
2101definition of a prefix key. (A Lisp program can explicitly pop up a
2102menu and receive the user's choice---see @ref{Pop-Up Menus}.)
87b2d5ff 2103
969fe9b5 2104 If the prefix key ends with a mouse event, Emacs handles the menu keymap
87b2d5ff
RS
2105by popping up a visible menu, so that the user can select a choice with
2106the mouse. When the user clicks on a menu item, the event generated is
2107whatever character or symbol has the binding that brought about that
2108menu item. (A menu item may generate a series of events if the menu has
2109multiple levels or comes from the menu bar.)
2110
969fe9b5 2111 It's often best to use a button-down event to trigger the menu. Then
87b2d5ff
RS
2112the user can select a menu item by releasing the button.
2113
969fe9b5 2114 A single keymap can appear as multiple menu panes, if you explicitly
87b2d5ff
RS
2115arrange for this. The way to do this is to make a keymap for each pane,
2116then create a binding for each of those maps in the main keymap of the
2117menu. Give each of these bindings an item string that starts with
2118@samp{@@}. The rest of the item string becomes the name of the pane.
2119See the file @file{lisp/mouse.el} for an example of this. Any ordinary
2120bindings with @samp{@@}-less item strings are grouped into one pane,
2121which appears along with the other panes explicitly created for the
2122submaps.
2123
969fe9b5 2124 X toolkit menus don't have panes; instead, they can have submenus.
87b2d5ff
RS
2125Every nested keymap becomes a submenu, whether the item string starts
2126with @samp{@@} or not. In a toolkit version of Emacs, the only thing
2127special about @samp{@@} at the beginning of an item string is that the
2128@samp{@@} doesn't appear in the menu item.
2129
8a36c244
RS
2130 Multiple keymaps that define the same menu prefix key produce
2131separate panes or separate submenus.
87b2d5ff
RS
2132
2133@node Keyboard Menus
2134@subsection Menus and the Keyboard
2135
2136When a prefix key ending with a keyboard event (a character or function
2137key) has a definition that is a menu keymap, the user can use the
2138keyboard to choose a menu item.
2139
e465fdc2
GM
2140Emacs displays the menu's overall prompt string followed by the
2141alternatives (the item strings of the bindings) in the echo area. If
2142the bindings don't all fit at once, the user can type @key{SPC} to see
2143the next line of alternatives. Successive uses of @key{SPC} eventually
2144get to the end of the menu and then cycle around to the beginning. (The
2145variable @code{menu-prompt-more-char} specifies which character is used
2146for this; @key{SPC} is the default.)
87b2d5ff
RS
2147
2148When the user has found the desired alternative from the menu, he or she
2149should type the corresponding character---the one whose binding is that
2150alternative.
2151
bfe721d1 2152@ignore
87b2d5ff
RS
2153In a menu intended for keyboard use, each menu item must clearly
2154indicate what character to type. The best convention to use is to make
bfe721d1
KH
2155the character the first letter of the item string---that is something
2156users will understand without being told. We plan to change this; by
2157the time you read this manual, keyboard menus may explicitly name the
2158key for each alternative.
2159@end ignore
87b2d5ff
RS
2160
2161This way of using menus in an Emacs-like editor was inspired by the
2162Hierarkey system.
73804d4b 2163
87b2d5ff
RS
2164@defvar menu-prompt-more-char
2165This variable specifies the character to use to ask to see
2166the next line of a menu. Its initial value is 32, the code
2167for @key{SPC}.
2168@end defvar
73804d4b 2169
87b2d5ff
RS
2170@node Menu Example
2171@subsection Menu Example
f9f59935 2172@cindex menu definition example
73804d4b 2173
f9f59935 2174 Here is a complete example of defining a menu keymap. It is the
8a36c244
RS
2175definition of the @samp{Replace} submenu in the @samp{Edit} menu in
2176the menu bar, and it uses the extended menu item format
2177(@pxref{Extended Menu Items}). First we create the keymap, and give
2178it a name:
73804d4b 2179
8a36c244
RS
2180@smallexample
2181(defvar menu-bar-replace-menu (make-sparse-keymap "Replace"))
2182@end smallexample
73804d4b 2183
969fe9b5
RS
2184@noindent
2185Next we define the menu items:
73804d4b 2186
8a36c244
RS
2187@smallexample
2188(define-key menu-bar-replace-menu [tags-repl-continue]
2189 '(menu-item "Continue Replace" tags-loop-continue
2190 :help "Continue last tags replace operation"))
2191(define-key menu-bar-replace-menu [tags-repl]
2192 '(menu-item "Replace in tagged files" tags-query-replace
2193 :help "Interactively replace a regexp in all tagged files"))
2194(define-key menu-bar-replace-menu [separator-replace-tags]
2195 '(menu-item "--"))
2196;; @r{@dots{}}
2197@end smallexample
f9f59935
RS
2198
2199@noindent
2200Note the symbols which the bindings are ``made for''; these appear
2201inside square brackets, in the key sequence being defined. In some
2202cases, this symbol is the same as the command name; sometimes it is
2203different. These symbols are treated as ``function keys'', but they are
2204not real function keys on the keyboard. They do not affect the
2205functioning of the menu itself, but they are ``echoed'' in the echo area
2206when the user selects from the menu, and they appear in the output of
2207@code{where-is} and @code{apropos}.
2208
db8af011
LT
2209 The menu in this example is intended for use with the mouse. If a
2210menu is intended for use with the keyboard, that is, if it is bound to
2211a key sequence ending with a keyboard event, then the menu items
2212should be bound to characters or ``real'' function keys, that can be
2213typed with the keyboard.
2214
f9f59935
RS
2215 The binding whose definition is @code{("--")} is a separator line.
2216Like a real menu item, the separator has a key symbol, in this case
8a36c244
RS
2217@code{separator-replace-tags}. If one menu has two separators, they
2218must have two different key symbols.
f9f59935
RS
2219
2220 Here is how we make this menu appear as an item in the parent menu:
2221
2222@example
8a36c244
RS
2223(define-key menu-bar-edit-menu [replace]
2224 (list 'menu-item "Replace" menu-bar-replace-menu))
f9f59935
RS
2225@end example
2226
2227@noindent
2228Note that this incorporates the submenu keymap, which is the value of
8a36c244
RS
2229the variable @code{menu-bar-replace-menu}, rather than the symbol
2230@code{menu-bar-replace-menu} itself. Using that symbol in the parent
2231menu item would be meaningless because @code{menu-bar-replace-menu} is
2232not a command.
f9f59935 2233
8a36c244 2234 If you wanted to attach the same replace menu to a mouse click, you
969fe9b5 2235can do it this way:
f9f59935
RS
2236
2237@example
a9f0a989 2238(define-key global-map [C-S-down-mouse-1]
8a36c244 2239 menu-bar-replace-menu)
f9f59935 2240@end example
73804d4b 2241
87b2d5ff
RS
2242@node Menu Bar
2243@subsection The Menu Bar
2244@cindex menu bar
73804d4b 2245
87b2d5ff
RS
2246 Most window systems allow each frame to have a @dfn{menu bar}---a
2247permanently displayed menu stretching horizontally across the top of the
2248frame. The items of the menu bar are the subcommands of the fake
8a36c244 2249``function key'' @code{menu-bar}, as defined in the active keymaps.
73804d4b 2250
87b2d5ff
RS
2251 To add an item to the menu bar, invent a fake ``function key'' of your
2252own (let's call it @var{key}), and make a binding for the key sequence
2253@code{[menu-bar @var{key}]}. Most often, the binding is a menu keymap,
2254so that pressing a button on the menu bar item leads to another menu.
73804d4b 2255
87b2d5ff
RS
2256 When more than one active keymap defines the same fake function key
2257for the menu bar, the item appears just once. If the user clicks on
969fe9b5 2258that menu bar item, it brings up a single, combined menu containing
87b2d5ff 2259all the subcommands of that item---the global subcommands, the local
969fe9b5 2260subcommands, and the minor mode subcommands.
73804d4b 2261
22697dac
KH
2262 The variable @code{overriding-local-map} is normally ignored when
2263determining the menu bar contents. That is, the menu bar is computed
2264from the keymaps that would be active if @code{overriding-local-map}
2265were @code{nil}. @xref{Active Keymaps}.
2266
87b2d5ff
RS
2267 In order for a frame to display a menu bar, its @code{menu-bar-lines}
2268parameter must be greater than zero. Emacs uses just one line for the
2269menu bar itself; if you specify more than one line, the other lines
2270serve to separate the menu bar from the windows in the frame. We
fdb48508 2271recommend 1 or 2 as the value of @code{menu-bar-lines}. @xref{Layout
bfe721d1 2272Parameters}.
73804d4b 2273
87b2d5ff 2274 Here's an example of setting up a menu bar item:
73804d4b 2275
87b2d5ff 2276@example
73804d4b 2277@group
87b2d5ff
RS
2278(modify-frame-parameters (selected-frame)
2279 '((menu-bar-lines . 2)))
73804d4b 2280@end group
73804d4b 2281
73804d4b 2282@group
87b2d5ff
RS
2283;; @r{Make a menu keymap (with a prompt string)}
2284;; @r{and make it the menu bar item's definition.}
2285(define-key global-map [menu-bar words]
2286 (cons "Words" (make-sparse-keymap "Words")))
73804d4b 2287@end group
87b2d5ff 2288
73804d4b 2289@group
969fe9b5 2290;; @r{Define specific subcommands in this menu.}
87b2d5ff
RS
2291(define-key global-map
2292 [menu-bar words forward]
2293 '("Forward word" . forward-word))
73804d4b 2294@end group
73804d4b 2295@group
87b2d5ff
RS
2296(define-key global-map
2297 [menu-bar words backward]
2298 '("Backward word" . backward-word))
73804d4b 2299@end group
87b2d5ff 2300@end example
73804d4b 2301
87b2d5ff
RS
2302 A local keymap can cancel a menu bar item made by the global keymap by
2303rebinding the same fake function key with @code{undefined} as the
2304binding. For example, this is how Dired suppresses the @samp{Edit} menu
2305bar item:
73804d4b 2306
87b2d5ff
RS
2307@example
2308(define-key dired-mode-map [menu-bar edit] 'undefined)
2309@end example
73804d4b 2310
87b2d5ff
RS
2311@noindent
2312@code{edit} is the fake function key used by the global map for the
2313@samp{Edit} menu bar item. The main reason to suppress a global
2314menu bar item is to regain space for mode-specific items.
73804d4b 2315
87b2d5ff
RS
2316@defvar menu-bar-final-items
2317Normally the menu bar shows global items followed by items defined by the
2318local maps.
73804d4b 2319
87b2d5ff
RS
2320This variable holds a list of fake function keys for items to display at
2321the end of the menu bar rather than in normal sequence. The default
969fe9b5 2322value is @code{(help-menu)}; thus, the @samp{Help} menu item normally appears
87b2d5ff
RS
2323at the end of the menu bar, following local menu items.
2324@end defvar
73804d4b 2325
bd98ada9 2326@defvar menu-bar-update-hook
35c14f98
RS
2327This normal hook is run by redisplay to update the menu bar contents,
2328before redisplaying the menu bar. You can use it to update submenus
2329whose contents should vary. Since this hook is run frequently, we
2330advise you to ensure that the functions it calls do not take much time
2331in the usual case.
bd98ada9
RS
2332@end defvar
2333
8241495d
RS
2334@node Tool Bar
2335@subsection Tool bars
2336@cindex tool bar
2337
2338 A @dfn{tool bar} is a row of icons at the top of a frame, that execute
2339commands when you click on them---in effect, a kind of graphical menu
35c14f98 2340bar.
8241495d
RS
2341
2342 The frame parameter @code{tool-bar-lines} (X resource @samp{toolBar})
05aea714 2343controls how many lines' worth of height to reserve for the tool bar. A
8241495d
RS
2344zero value suppresses the tool bar. If the value is nonzero, and
2345@code{auto-resize-tool-bars} is non-@code{nil}, the tool bar expands and
2346contracts automatically as needed to hold the specified contents.
2347
2348 The tool bar contents are controlled by a menu keymap attached to a
2349fake ``function key'' called @code{tool-bar} (much like the way the menu
2350bar is controlled). So you define a tool bar item using
2351@code{define-key}, like this:
2352
2353@example
2354(define-key global-map [tool-bar @var{key}] @var{item})
2355@end example
2356
2357@noindent
2358where @var{key} is a fake ``function key'' to distinguish this item from
2359other items, and @var{item} is a menu item key binding (@pxref{Extended
2360Menu Items}), which says how to display this item and how it behaves.
2361
2362 The usual menu keymap item properties, @code{:visible},
2363@code{:enable}, @code{:button}, and @code{:filter}, are useful in
2364tool bar bindings and have their normal meanings. The @var{real-binding}
2365in the item must be a command, not a keymap; in other words, it does not
2366work to define a tool bar icon as a prefix key.
2367
b08d86c6
DL
2368 The @code{:help} property specifies a ``help-echo'' string to display
2369while the mouse is on that item. This is displayed in the same way as
2370@code{help-echo} text properties (@pxref{Help display}).
8241495d
RS
2371
2372 In addition, you should use the @code{:image} property;
2373this is how you specify the image to display in the tool bar:
2374
2375@table @code
2376@item :image @var{image}
2377@var{images} is either a single image specification or a vector of four
2378image specifications. If you use a vector of four,
2379one of them is used, depending on circumstances:
2380
2381@table @asis
2382@item item 0
05aea714 2383Used when the item is enabled and selected.
8241495d
RS
2384@item item 1
2385Used when the item is enabled and deselected.
2386@item item 2
2387Used when the item is disabled and selected.
2388@item item 3
2389Used when the item is disabled and deselected.
2390@end table
2391@end table
2392
a4776185
GM
2393If @var{image} is a single image specification, Emacs draws the tool bar
2394button in disabled state by applying an edge-detection algorithm to the
2395image.
2396
9e445e29
DL
2397The default tool bar is defined so that items specific to editing do not
2398appear for major modes whose command symbol has a @code{mode-class}
2399property of @code{special} (@pxref{Major Mode Conventions}). Major
2400modes may add items to the global bar by binding @code{[tool-bar
2401@var{foo}]} in their local map. It makes sense for some major modes to
2402replace the default tool bar items completely, since not many can be
2403accommodated conveniently, and the default bindings make this easy by
2404using an indirection through @code{tool-bar-map}.
2405
2406@defvar tool-bar-map
2407@tindex tool-bar-map
2408By default, the global map binds @code{[tool-bar]} as follows:
2409@example
2410(global-set-key [tool-bar]
2411 '(menu-item "tool bar" ignore
2412 :filter (lambda (ignore) tool-bar-map)))
2413@end example
2414@noindent
2415Thus the tool bar map is derived dynamically from the value of variable
2416@code{tool-bar-map} and you should normally adjust the default (global)
2417tool bar by changing that map. Major modes may replace the global bar
2418completely by making @code{tool-bar-map} buffer-local and set to a
2419keymap containing only the desired items. Info mode provides an
2420example.
2421@end defvar
2422
2423There are two convenience functions for defining tool bar items, as
2424follows.
2425
2426@defun tool-bar-add-item icon def key &rest props
2427@tindex tool-bar-add-item
2428This function adds an item to the tool bar by modifying
2429@code{tool-bar-map}. The image to use is defined by @var{icon}, which
6d682d42 2430is the base name of an XPM, XBM or PBM image file to be located by
9e445e29
DL
2431@code{find-image}. Given a value @samp{"exit"}, say, @file{exit.xpm},
2432@file{exit.pbm} and @file{exit.xbm} would be searched for in that order
2433on a color display. On a monochrome display, the search order is
2434@samp{.pbm}, @samp{.xbm} and @samp{.xpm}. The binding to use is the
2435command @var{def}, and @var{key} is the fake function key symbol in the
2436prefix keymap. The remaining arguments @var{props} are additional
2437property list elements to add to the menu item specification.
2438
f3544d11 2439To define items in some local map, bind @code{tool-bar-map} with
9e445e29
DL
2440@code{let} around calls of this function:
2441@example
177c0ea7 2442(defvar foo-tool-bar-map
9e445e29
DL
2443 (let ((tool-bar-map (make-sparse-keymap)))
2444 (tool-bar-add-item @dots{})
2445 @dots{}
2446 tool-bar-map))
2447@end example
2448@end defun
2449
2450@defun tool-bar-add-item-from-menu command icon &optional map &rest props
2451@tindex tool-bar-add-item-from-menu
229644e7 2452This function is a convenience for defining tool bar items which are
9e445e29
DL
2453consistent with existing menu bar bindings. The binding of
2454@var{command} is looked up in the menu bar in @var{map} (default
2455@code{global-map}) and modified to add an image specification for
229644e7 2456@var{icon}, which is found in the same way as by
9e445e29 2457@code{tool-bar-add-item}. The resulting binding is then placed in
229644e7
RS
2458@code{tool-bar-map}, so use this function only for global tool bar
2459items.
2460
2461@var{map} must contain an appropriate keymap bound to
2462@code{[menu-bar]}. The remaining arguments @var{props} are additional
2463property list elements to add to the menu item specification.
2464@end defun
2465
2466@defun tool-bar-local-item-from-menu command icon in-map &optional from-map &rest props
2467This function is used for making non-global tool bar items. Use it
2468like @code{tool-bar-add-item-from-menu} except that @var{in-map}
2469specifies the local map to make the definition in. The argument
db8af011 2470@var{from-map} is like the @var{map} argument of
229644e7 2471@code{tool-bar-add-item-from-menu}.
9e445e29
DL
2472@end defun
2473
8241495d
RS
2474@tindex auto-resize-tool-bar
2475@defvar auto-resize-tool-bar
2476If this variable is non-@code{nil}, the tool bar automatically resizes to
2477show all defined tool bar items---but not larger than a quarter of the
2478frame's height.
2479@end defvar
2480
6d682d42
RS
2481@tindex auto-raise-tool-bar-buttons
2482@defvar auto-raise-tool-bar-buttons
8241495d
RS
2483If this variable is non-@code{nil}, tool bar items display
2484in raised form when the mouse moves over them.
2485@end defvar
2486
6d682d42
RS
2487@tindex tool-bar-button-margin
2488@defvar tool-bar-button-margin
8241495d 2489This variable specifies an extra margin to add around tool bar items.
6d682d42 2490The value is an integer, a number of pixels. The default is 4.
8241495d
RS
2491@end defvar
2492
6d682d42
RS
2493@tindex tool-bar-button-relief
2494@defvar tool-bar-button-relief
8241495d 2495This variable specifies the shadow width for tool bar items.
6d682d42 2496The value is an integer, a number of pixels. The default is 1.
8241495d
RS
2497@end defvar
2498
2499 You can define a special meaning for clicking on a tool bar item with
2500the shift, control, meta, etc., modifiers. You do this by setting up
2501additional items that relate to the original item through the fake
2502function keys. Specifically, the additional items should use the
2503modified versions of the same fake function key used to name the
2504original item.
2505
2506 Thus, if the original item was defined this way,
2507
2508@example
2509(define-key global-map [tool-bar shell]
2510 '(menu-item "Shell" shell
2511 :image (image :type xpm :file "shell.xpm")))
2512@end example
2513
2514@noindent
2515then here is how you can define clicking on the same tool bar image with
2516the shift modifier:
2517
2518@example
2519(define-key global-map [tool-bar S-shell] 'some-command)
2520@end example
2521
2522@xref{Function Keys}, for more information about how to add modifiers to
2523function keys.
2524
87b2d5ff
RS
2525@node Modifying Menus
2526@subsection Modifying Menus
73804d4b 2527
87b2d5ff
RS
2528 When you insert a new item in an existing menu, you probably want to
2529put it in a particular place among the menu's existing items. If you
2530use @code{define-key} to add the item, it normally goes at the front of
f9f59935 2531the menu. To put it elsewhere in the menu, use @code{define-key-after}:
73804d4b 2532
e5a00c9c 2533@defun define-key-after map key binding &optional after
87b2d5ff
RS
2534Define a binding in @var{map} for @var{key}, with value @var{binding},
2535just like @code{define-key}, but position the binding in @var{map} after
f9f59935
RS
2536the binding for the event @var{after}. The argument @var{key} should be
2537of length one---a vector or string with just one element. But
969fe9b5
RS
2538@var{after} should be a single event type---a symbol or a character, not
2539a sequence. The new binding goes after the binding for @var{after}. If
32f44537
DL
2540@var{after} is @code{t} or is omitted, then the new binding goes last, at
2541the end of the keymap. However, new bindings are added before any
2542inherited keymap.
b2955417 2543
969fe9b5 2544Here is an example:
73804d4b 2545
87b2d5ff
RS
2546@example
2547(define-key-after my-menu [drink]
32f44537 2548 '("Drink" . drink-command) 'eat)
87b2d5ff 2549@end example
73804d4b 2550
87b2d5ff 2551@noindent
969fe9b5
RS
2552makes a binding for the fake function key @key{DRINK} and puts it
2553right after the binding for @key{EAT}.
f9f59935 2554
87b2d5ff
RS
2555Here is how to insert an item called @samp{Work} in the @samp{Signals}
2556menu of Shell mode, after the item @code{break}:
73804d4b 2557
87b2d5ff
RS
2558@example
2559(define-key-after
2560 (lookup-key shell-mode-map [menu-bar signals])
2561 [work] '("Work" . work-command) 'break)
2562@end example
87b2d5ff 2563@end defun
ab5796a9
MB
2564
2565@ignore
2566 arch-tag: cfb87287-9364-4e46-9e93-6c2f7f6ae794
2567@end ignore