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