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