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