annotate lispref/keymaps.texi @ 71140:80310801887e

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