annotate man/xemacs/keystrokes.texi @ 2951:b694dfd2f40e

[xemacs-hg @ 2005-09-26 08:13:00 by ben] Compile Windows with gmp, ldap, postgresql, db, etc. README: Major rewrite. Document how to compile various optional libs. config.inc.samp: Update to recent versions of optional libs. Add support for gmp, db, postgresql, ldap. Turn on optimization when not debug. minitar.c: Include config.h. xemacs.mak: Figure out VC++ version and use it to set debug and browser flags appropriately. Add support for building gmp, db, postgresql, ldap. Rewrite handling of optional stuff so it is all added to single variables OPT_* rather than to various FOO_* variables. Pass -I$(SRC) to minitar.c so it compiles. Pass module sources, not objects, to make-docfile. Delete more stuff in `make clean'.
author ben
date Mon, 26 Sep 2005 08:13:00 +0000
parents abe6d1db359e
children 4cad7ff4a200
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 @node Keystrokes, Pull-down Menus, Frame, Top
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 @chapter Keystrokes, Key Sequences, and Key Bindings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 @iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 This chapter discusses the character set Emacs uses for input commands
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 and inside files. You have already learned that the more frequently
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 used Emacs commands are bound to keys. For example, @kbd{Control-f} is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 bound to @code{forward-char}. The following issues are covered:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 How keystrokes can be represented
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 How you can create key sequences from keystrokes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 How you can add to the available modifier keys by customizing your
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 keyboard: for example, you could have the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 @key{Capslock} key be understood as the @key{Super} key by Emacs. A
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 @key{Super} key is used like @key{Control} or @key{Meta} in that you hold
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 it while typing another key.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 You will also learn how to customize existing key bindings and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 create new ones.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 @end iftex
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 @menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 * Intro to Keystrokes:: Keystrokes as building blocks of key sequences.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 * Representing Keystrokes:: Using lists of modifiers and keysyms to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 represent keystrokes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 * Key Sequences:: Combine key strokes into key sequences you can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 bind to commands.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 * String Key Sequences:: Available for upward compatibility.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 * Meta Key:: Using @key{ESC} to represent @key{Meta}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 * Super and Hyper Keys:: Adding modifier keys on certain keyboards.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 * Character Representation:: How characters appear in Emacs buffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 * Commands:: How commands are bound to key sequences.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 @end menu
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 @node Intro to Keystrokes, Representing Keystrokes, Keystrokes, Keystrokes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 @section Keystrokes as Building Blocks of Key Sequences
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 @cindex character set
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 @cindex ASCII
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 @cindex keystroke
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 Earlier versions of Emacs used only the ASCII character set,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 which defines 128 different character codes. Some of these codes are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 assigned graphic symbols like @samp{a} and @samp{=}; the rest are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 control characters, such as @kbd{Control-a} (also called @kbd{C-a}).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 @kbd{C-a} means you hold down the @key{CTRL} key and then press
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 @kbd{a}.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 Keybindings in XEmacs are not restricted to the set of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 keystrokes that can be represented in ASCII. XEmacs can tell the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 difference between, for example, @kbd{Control-h}, @kbd{Control-Shift-h},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 and @kbd{Backspace}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 @cindex modifier key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 @cindex keysym
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 @kindex meta key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 @kindex control key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 @kindex hyper key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 @kindex super key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 @kindex shift key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 @kindex button1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 @kindex button2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 @kindex button3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 @kindex button1up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 @kindex button2up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 @kindex button3up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 A keystroke is like a piano chord: you get it by simultaneously
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 striking several keys. To be more precise, a keystroke consists
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 of a possibly empty set of modifiers followed by a single
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 @dfn{keysym}. The set of modifiers is small; it consists of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 @kbd{Control}, @kbd{Meta}, @kbd{Super}, @kbd{Hyper}, and @kbd{Shift}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 The rest of the keys on your keyboard, along with the mouse buttons,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 make up the set of keysyms. A keysym is usually what is printed on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 keys on your keyboard. Here is a table of some of the symbolic names
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 for keysyms:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 @table @kbd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 @item a,b,c...
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 alphabetic keys
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 @item f1,f2...
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 function keys
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 @item button1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 left mouse button
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 @item button2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 middle mouse button
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 @item button3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 right mouse button
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 @item button1up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 upstroke on the left mouse button
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 @item button2up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 upstroke on the middle mouse button
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 @item button3up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 upstroke on the right mouse button
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 @item return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 Return key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 @vindex keyboard-translate-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 Use the variable @code{keyboard-translate-table} only if you are on a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 dumb tty, as it cannot handle input that cannot be represented as ASCII.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 The value of this variable is a string used as a translate table for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 keyboard input or @code{nil}. Each character is looked up in this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 string and the contents used instead. If the string is of length
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 @code{n}, character codes @code{N} and up are untranslated. If you are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 running Emacs under X, you should do the translations with the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 @code{xmodmap} program instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 @node Representing Keystrokes, Key Sequences, Intro to Keystrokes, Keystrokes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 @comment node-name, next, previous, up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 @subsection Representing Keystrokes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 @kindex hyper key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 @kindex super key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 @findex read-key-sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 XEmacs represents keystrokes as lists. Each list consists of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 an arbitrary combination of modifiers followed by a single keysym at the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 end of the list. If the keysym corresponds to an ASCII character, you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 can use its character code. (A keystroke may also be represented by an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 event object, as returned by the @code{read-key-sequence} function;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 non-programmers need not worry about this.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 The following table gives some examples of how to list representations
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 for keystrokes. Each list consists of sets of modifiers followed by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 keysyms:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 @table @kbd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 @item (control a)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 Pressing @key{CTRL} and @kbd{a} simultaneously.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 @item (control ?a)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 Another way of writing the keystroke @kbd{C-a}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 @item (control 65)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 Yet another way of writing the keystroke @kbd{C-a}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 @item (break)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 Pressing the @key{BREAK} key.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 @item (control meta button2up)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 Release the middle mouse button, while pressing @key{CTRL} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 @key{META}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 @end table
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
146 @cindex shift modifier
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 Note: As you define keystrokes, you can use the @kbd{shift} key only
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 as a modifier with characters that do not have a second keysym on the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 same key, such as @kbd{backspace} and @kbd{tab}. It is an error to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 define a keystroke using the @key{shift} modifier with keysyms such as
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 @kbd{a} and @kbd{=}. The correct forms are @kbd{A} and @kbd{+}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 @node Key Sequences, String Key Sequences, Representing Keystrokes, Keystrokes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 @subsection Representing Key Sequences
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 A @dfn{complete key sequence} is a sequence of keystrokes that Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 understands as a unit. Key sequences are significant because you can
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 bind them to commands. Note that not all sequences of keystrokes are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 possible key sequences. In particular, the initial keystrokes in a key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 sequence must make up a @dfn{prefix key sequence}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 Emacs represents a key sequence as a vector of keystrokes. Thus, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 schematic representation of a complete key sequence is as follows:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 @example
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
166 [(modifier .. modifier keysym) ... (modifier .. modifier keysym)]
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 Here are some examples of complete key sequences:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 @table @kbd
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
172 @item [(control c) (control a)]
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 Typing @kbd{C-c} followed by @kbd{C-a}
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
174 @item [(control c) (control 65)]
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 Typing @kbd{C-c} followed by @kbd{C-a}. (Using the ASCII code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 for the character `a')@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 @item [(control c) (break)]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 Typing @kbd{C-c} followed by the @kbd{break} character.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 @kindex C-c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 @kindex C-x
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 @kindex C-h
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 @kindex ESC
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 @cindex prefix key sequence
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 A @dfn{prefix key sequence} is the beginning of a series of longer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 sequences that are valid key sequences; adding any single keystroke to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 the end of a prefix results in a valid key sequence. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 @kbd{control-x} is standardly defined as a prefix. Thus there is a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 two-character key sequence starting with @kbd{C-x} for each valid
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 keystroke, giving numerous possibilities. Here are some samples:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 @itemize @bullet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 @kbd{[(control x) (c)]}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 @kbd{[(control x) (control c)]}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 @end itemize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 Adding one character to a prefix key does not have to form a complete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 key. It could make another, longer prefix. For example, @kbd{[(control
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 x) (\4)]} is itself a prefix that leads to any number of different
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 three-character keys, including @kbd{[(control x) (\4) (f)]},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 @kbd{[(control x) (\4) (b)]} and so on. It would be possible to define
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 one of those three-character sequences as a prefix, creating a series of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 four-character keys, but we did not define any of them this way.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 By contrast, the two-character sequence @kbd{[(control f) (control
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 k)]} is not a key, because the @kbd{(control f)} is a complete key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 sequence in itself. You cannot give @kbd{[(control f (control k)]} an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 independent meaning as a command while @kbd{(control f)} is a complete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 sequence, because Emacs would understand @key{C-f C-k} as two
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 commands.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 The predefined prefix key sequences in Emacs are @kbd{(control c)},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 @kbd{(control x)}, @kbd{(control h)}, @kbd{[(control x) (\4)]}, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 @kbd{escape}. You can customize Emacs and could make new prefix keys or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 eliminate the default key sequences. @xref{Key Bindings}. For example,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 if you redefine @kbd{(control f)} as a prefix, @kbd{[(control f)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 (control k)]} automatically becomes a valid key sequence (complete,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 unless you define it as a prefix as well). Conversely, if you remove
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 the prefix definition of @kbd{[(control x) (\4)]}, @kbd{[(control x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 (\4) (f)]} (or @kbd{[(control x) (\4) @var{anything}]}) is no longer a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 valid key sequence.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 Note that the above paragraphs uses \4 instead of simply 4, because \4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 is the symbol whose name is "4", and plain 4 is the integer 4, which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 would have been interpreted as the ASCII value. Another way of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 representing the symbol whose name is "4" is to write ?4, which would be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 interpreted as the number 52, which is the ASCII code for the character
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 "4". We could therefore actually have written 52 directly, but that is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 far less clear.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 @node String Key Sequences, Meta Key, Key Sequences, Keystrokes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 @comment node-name, next, previous, up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 @subsection String Key Sequences
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 For backward compatibility, you may also represent a key sequence using
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 strings. For example, we have the following equivalent representations:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 @table @kbd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 @item "\C-c\C-c"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 @code{[(control c) (control c)]}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 @item "\e\C-c"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 @code{[(meta control c)]}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 @end table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 @kindex LFD
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 @kindex TAB
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 @node Meta Key, Super and Hyper Keys, String Key Sequences, Keystrokes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 @comment node-name, next, previous, up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 @subsection Assignment of the @key{META} Key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 @kindex META
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 @kindex ESC
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 Not all terminals have the complete set of modifiers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 Terminals that have a @key{Meta} key allow you to type Meta characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 by just holding that key down. To type @kbd{Meta-a}, hold down
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 @key{META} and press @kbd{a}. On those terminals, the @key{META} key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 works like the @key{SHIFT} key. Such a key is not always labeled
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 @key{META}, however, as this function is often a special option for a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 key with some other primary purpose.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 If there is no @key{META} key, you can still type Meta characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 using two-character sequences starting with @key{ESC}. To enter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 @kbd{M-a}, you could type @kbd{@key{ESC} a}. To enter @kbd{C-M-a}, you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 would type @kbd{ESC C-a}. @key{ESC} is allowed on terminals with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 Meta keys, too, in case you have formed a habit of using it.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 If you are running under X and do not have a @key{META} key, it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 is possible to reconfigure some other key to be a @key{META}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 key. @xref{Super and Hyper Keys}. @refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 @vindex meta-flag
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 Emacs believes the terminal has a @key{META} key if the variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 @code{meta-flag} is non-@code{nil}. Normally this is set automatically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 according to the termcap entry for your terminal type. However, sometimes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 the termcap entry is wrong, and then it is useful to set this variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 yourself. @xref{Variables}, for how to do this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 Note: If you are running under the X window system, the setting of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 the @code{meta-flag} variable is irrelevant.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 @node Super and Hyper Keys, Character Representation, Meta Key, Keystrokes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 @comment node-name, next, previous, up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 @subsection Assignment of the @key{SUPER} and @key{HYPER} Keys
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 @kindex hyper key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 @kindex super key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 Most keyboards do not, by default, have @key{SUPER} or @key{HYPER}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 modifier keys. Under X, you can simulate the @key{SUPER} or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 @key{HYPER} key if you want to bind keys to sequences using @kbd{super}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 and @kbd{hyper}. You can use the @code{xmodmap} program to do this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 For example, to turn your @key{CAPS-LOCK} key into a @key{SUPER} key,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 do the following:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 Create a file called @code{~/.xmodmap}. In this file, place the lines
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 @example
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
302 remove Lock = Caps_Lock
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
303 keysym Caps_Lock = Super_L
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
304 add Mod2 = Super_L
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 @end example
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 The first line says that the key that is currently called @code{Caps_Lock}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 should no longer behave as a ``lock'' key. The second line says that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 this should now be called @code{Super_L} instead. The third line says that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 the key called @code{Super_L} should be a modifier key, which produces the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 @code{Mod2} modifier.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 To create a @key{META} or @key{HYPER} key instead of a @key{SUPER} key,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 replace the word @code{Super} above with @code{Meta} or @code{Hyper}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 Just after you start up X, execute the command @code{xmodmap /.xmodmap}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 You can add this command to the appropriate initialization file to have
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 the command executed automatically.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 If you have problems, see the documentation for the @code{xmodmap}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 program. The X keyboard model is quite complicated, and explaining
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 it is beyond the scope of this manual. However, we reprint the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 following description from the X Protocol document for your convenience:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 @cindex keysyms
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 @cindex keycode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 A list of keysyms is associated with each keycode. If that list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 (ignoring trailing @code{NoSymbol} entries) is a single keysym @samp{K},
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 then the list is treated as if it were the list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 @code{``K NoSymbol K NoSymbol''}. If the list (ignoring trailing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 @code{NoSymbol} entries) is a pair of keysyms @samp{K1 K2}, then the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 list is treated as if it were the list @code{``K1 K2 K1 K2''}. If the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 list (ignoring trailing @code{NoSymbol} entries) is a triple of keysyms
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 @samp{K1 K2 K3}, then the list is treated as if it were the list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 @code{``K1 K2 K3 NoSymbol''}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 The first four elements of the list are split into two groups of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 keysyms. Group 1 contains the first and second keysyms; Group 2 contains
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 third and fourth keysyms. Within each group, if the second element of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 the group is NoSymbol, then the group should be treated as if the second
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 element were the same as the first element, except when the first
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 element is an alphabetic keysym @samp{K} for which both lowercase and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 uppercase forms are defined. In that case, the group should be treated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 as if the first element were the lowercase form of @samp{K} and the second
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 element were the uppercase form of @samp{K}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 The standard rules for obtaining a keysym from a KeyPress event make use of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 only the Group 1 and Group 2 keysyms; no interpretation of other keysyms in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 the list is given here. (That is, the last four keysyms are unused.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 Which group to use is determined by modifier state. Switching between
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 groups is controlled by the keysym named @code{Mode_switch}. Attach that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 keysym to some keycode and attach that keycode to any one of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 modifiers Mod1 through Mod5. This modifier is called the @dfn{group
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 modifier}. For any keycode, Group 1 is used when the group modifier is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 off, and Group 2 is used when the group modifier is on.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 Within a group, which keysym to use is also determined by modifier
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 state. The first keysym is used when the @code{Shift} and @code{Lock}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 modifiers are off. The second keysym is used when the @code{Shift}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 modifier is on, or when the @code{Lock} modifier is on and the second
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 keysym is uppercase alphabetic, or when the @code{Lock} modifier is on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 and is interpreted as @code{ShiftLock}. Otherwise, when the @code{Lock}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 modifier is on and is interpreted as @code{CapsLock}, the state of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 @code{Shift} modifier is applied first to select a keysym,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 but if that keysym is lower-case alphabetic, then the corresponding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 upper-case keysym is used instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 In addition to the above information on keysyms, we also provide the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 following description of modifier mapping from the InterClient
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 Communications Conventions Manual:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 @cindex modifier mapping
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 X11 supports 8 modifier bits, of which 3 are pre-assigned to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 @code{Shift}, @code{Lock}, and @code{Control}. Each modifier bit is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 controlled by the state of a set of keys, and these sets are specified
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 in a table accessed by @code{GetModifierMapping()} and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 @code{SetModifierMapping()}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 A client needing to use one of the pre-assigned modifiers should assume
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 that the modifier table has been set up correctly to control these
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 modifiers. The @code{Lock} modifier should be interpreted as @code{Caps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 Lock} or @code{Shift Lock} according to whether the keycodes in its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 controlling set include @code{XK_Caps_Lock} or @code{XK_Shift_Lock}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 Clients should determine the meaning of a modifier bit from the keysyms
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 being used to control it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 A client needing to use an extra modifier, for example @code{Meta}, should:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 @enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 Scan the existing modifier mappings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 @enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 If it finds a modifier that contains a keycode whose set of keysyms
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 includes @code{XK_Meta_L} or @code{XK_Meta_R}, it should use that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 modifier bit.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 If there is no existing modifier controlled by @code{XK_Meta_L} or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 @code{XK_Meta_R}, it should select an unused modifier bit (one with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 an empty controlling set) and:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 If there is a keycode with @code{XL_Meta_L} in its set of keysyms,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 add that keycode to the set for the chosen modifier, and then:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 @enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 If there is a keycode with @code{XL_Meta_R} in its set of keysyms,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 add that keycode to the set for the chosen modifier, and then:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 If the controlling set is still empty, interact with the user to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 select one or more keys to be @code{Meta}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 @item
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 If there are no unused modifier bits, ask the user to take corrective action.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 @end enumerate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 This means that the @code{Mod1} modifier does not necessarily mean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 @code{Meta}, although some applications (such as twm and emacs 18)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 assume that. Any of the five unassigned modifier bits could mean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 @code{Meta}; what matters is that a modifier bit is generated by a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 keycode which is bound to the keysym @code{Meta_L} or @code{Meta_R}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 Therefore, if you want to make a @key{META} key, the right way
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 is to make the keycode in question generate both a @code{Meta} keysym
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 and some previously-unassigned modifier bit.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 @node Character Representation, Commands, Super and Hyper Keys, Keystrokes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 @comment node-name, next, previous, up
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 @section Representation of Characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 This section briefly discusses how characters are represented in Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 buffers. @xref{Key Sequences}, for information on representing key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 sequences to create key bindings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 ASCII graphic characters in Emacs buffers are displayed with their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 graphics. @key{LFD} is the same as a newline character; it is displayed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 by starting a new line. @key{TAB} is displayed by moving to the next
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 tab stop column (usually every 8 spaces). Other control characters are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 displayed as a caret (@samp{^}) followed by the non-control version of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 the character; thus, @kbd{C-a} is displayed as @samp{^A}. Non-ASCII
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 characters 128 and up are displayed with octal escape sequences; thus,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 character code 243 (octal), also called @kbd{M-#} when used as an input
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 character, is displayed as @samp{\243}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 The variable @code{ctl-arrow} may be used to alter this behavior.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 @xref{Display Vars}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 @node Commands, , Character Representation, Keystrokes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 @section Keys and Commands
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 @cindex binding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 @cindex customization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 @cindex keymap
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 @cindex function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 @cindex command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 This manual is full of passages that tell you what particular keys do.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 But Emacs does not assign meanings to keys directly. Instead, Emacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 assigns meanings to @dfn{functions}, and then gives keys their meanings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 by @dfn{binding} them to functions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 A function is a Lisp object that can be executed as a program. Usually
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 it is a Lisp symbol that has been given a function definition; every
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 symbol has a name, usually made of a few English words separated by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 dashes, such as @code{next-line} or @code{forward-word}. It also has a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 @dfn{definition}, which is a Lisp program. Only some functions can be the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 bindings of keys; these are functions whose definitions use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 @code{interactive} to specify how to call them interactively. Such
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 functions are called @dfn{commands}, and their names are @dfn{command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 names}. More information on this subject will appear in the @i{XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 Lisp Reference Manual}.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 The bindings between keys and functions are recorded in various tables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 called @dfn{keymaps}. @xref{Key Bindings}, for more information on key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 sequences you can bind commands to. @xref{Keymaps}, for information on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 creating keymaps.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 When we say ``@kbd{C-n} moves down vertically one line'' we are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 glossing over a distinction that is irrelevant in ordinary use but is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 vital in understanding how to customize Emacs. The function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 @code{next-line} is programmed to move down vertically. @kbd{C-n}
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 has this effect @i{because} it is bound to that function. If you rebind
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 @kbd{C-n} to the function @code{forward-word} then @kbd{C-n} will move
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 forward by words instead. Rebinding keys is a common method of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 customization.@refill
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 The rest of this manual usually ignores this subtlety to keep
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 things simple. To give the customizer the information needed, we often
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 state the name of the command that really does the work in parentheses
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 after mentioning the key that runs it. For example, we will say that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 ``The command @kbd{C-n} (@code{next-line}) moves point vertically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 down,'' meaning that @code{next-line} is a command that moves vertically
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 down and @kbd{C-n} is a key that is standardly bound to it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 @cindex variables
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 While we are on the subject of information for customization only,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 it's a good time to tell you about @dfn{variables}. Often the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 description of a command will say, ``To change this, set the variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 @code{mumble-foo}.'' A variable is a name used to remember a value.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 Most of the variables documented in this manual exist just to facilitate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 customization: some command or other part of Emacs uses the variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 and behaves differently depending on its setting. Until you are interested in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 customizing, you can ignore the information about variables. When you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 are ready to be interested, read the basic information on variables, and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515 then the information on individual variables will make sense.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 @xref{Variables}.