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