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