(system-key-alist): Fix the code value for `remove'.
[bpt/emacs.git] / lisp / term / README
CommitLineData
9789a4be 1 This directory contains files of elisp that customize Emacs for certain
01d7b937
ER
2terminal types.
3
4 When Emacs starts, it checks the TERM environment variable to see what type
5of terminal the user is running on, checks for an elisp file named
6"term/${TERM}.el", and if one exists, loads it. If that doesn't yield a file
7that exists, the last hyphen and what follows it is stripped. If that doesn't
8yield a file that exists, the previous hyphen is stripped, and so on until all
9hyphens are gone. For example, if the terminal type is `aaa-48-foo', Emacs
10will try first `term/aaa-48-foo.el', then `term/aaa-48.el' and finally
11`term/aaa.el'.
9789a4be
ER
12
13 When writing terminal packages, there are some things it is good to keep in
14mind.
15
16 First, about keycap names. Your terminal package can create any keycap
17cookies it likes, but there are good reasons to stick to the set recognized by
01d7b937 18the X-windows code whenever possible. The key symbols recognized by Emacs
9789a4be
ER
19are listed in src/term.c; look for the string `keys' in that file.
20
21 For one thing, it means that you'll have the same Emacs key bindings on in
22terminal mode as on an X console. If there are differences, you can bet
23they'll frustrate you after you've forgotten about them.
24
25 For another, the X keysms provide a standard set of names that Emacs knows
26about. It tries to bind many of them to useful things at startup, before your
27.emacs is read (so you can override them). In some ways, the X keysym standard
28is a admittedly poor one; it's incomplete, and not well matched to the set of
29`virtual keys' that UNIX terminfo(3) provides. But, trust us, the alternatives
30were worse.
31
32 This doesn't mean that if your terminal has a "Cokebottle" key you shouldn't
33define a [cokebottle] keycap. But if you must define cookies that aren't in
34that set, try to pattern them on the standard terminfo variable names for
35clarity; also, for a fighting chance that your binding may be useful to someone
36else someday.
37
38 For example, if your terminal has a `find' key, observe that terminfo
39supports a key_find capability and call your cookie [key-find].
40
41Here is a complete list, with corresponding X keysyms.
42
43-----------------------------------------------------------------------------
44Variable name cap X Keysym Description
45-------------- --- ------------ -------------------------------------
46key_down kd down Sent by terminal down arrow key
47key_up ku up Sent by terminal up arrow key
48key_left kl left Sent by terminal left arrow key
49key_right kr right Sent by terminal right arrow key
50key_home kh home Sent by home key.
51key_backspace kb Sent by backspace key
52key_dl kd deleteline Sent by delete line key.
53key_il kA insertline Sent by insert line.
54key_dc kD Sent by delete character key.
55key_ic kI insertchar (1) Sent by ins char/enter ins mode key.
56key_eic KM Sent by rmir or smir in insert mode.
57key_clear kC Sent by clear screen or erase key.
58key_eos kS Sent by clear-to-end-of-screen key.
59key_eol kE Sent by clear-to-end-of-line key.
60key_sf kF Sent by scroll-forward/down key
61key_sr kR Sent by scroll-backward/up key
62key_npage kN next (2) Sent by next-page key
63key_ppage kP prior (2) Sent by previous-page key
64key_stab kT Sent by set-tab key
65key_ctab kt Sent by clear-tab key
66key_catab ka Sent by clear-all-tabs key.
67key_enter @8 kp-enter Enter/send (unreliable)
68key_print %9 print print or copy
69key_ll kH Sent by home-down key
70key_a1 K1 kp-1 Upper left of keypad
71key_a3 K3 kp-3 Upper right of keypad
72key_b2 K2 kp-5 Center of keypad
73key_c1 K4 kp-7 Lower left of keypad
74key_c3 K5 kp-9 Lower right of keypad
75key_btab kB backtab Back tab key
76key_beg @1 begin beg(inning) key
77key_cancel @2 cancel cancel key
78key_close @3 close key
79key_command @4 execute (3) cmd (command) key
80key_copy @5 copy key
81key_create @6 create key
82key_end @7 end end key
83key_exit @9 exit key
84key_find @0 find key
85key_help %1 help key
86key_mark %2 mark key
87key_message %3 message key
88key_move %4 move key
89key_next %5 next (2) next object key
90key_open %6 open key
91key_options %7 menu (3) options key
92key_previous %8 previous (2) previous object key
93key_redo %0 redo redo key
94key_reference &1 ref(erence) key
95key_refresh &2 refresh key
96key_replace &3 replace key
97key_restart &4 reset (3) restart key
98key_resume &5 resume key
99key_save &6 save key
100key_sbeg &9 shifted beginning key
101key_select *6 select select key
102key_suspend &7 suspend key
103key_undo &8 undo undo key
104
105key_scancel &0 shifted cancel key
106key_scommand *1 shifted command key
107key_scopy *2 shifted copy key
108key_screate *3 shifted create key
109key_sdc *4 shifted delete char key
110key_sdl *5 shifted delete line key
111key_send *7 shifted end key
112key_seol *8 shifted clear line key
113key_sexit *9 shifted exit key
114key_sf kF shifted find key
115key_shelp #1 shifted help key
116key_shome #2 shifted home key
117key_sic #3 shifted input key
118key_sleft #4 shifted left arrow key
119key_smessage %a shifted message key
120key_smove %b shifted move key
121key_snext %c shifted next key
122key_soptions %d shifted options key
123key_sprevious %e shifted prev key
124key_sprint %f shifted print key
125key_sredo %g shifted redo key
126key_sreplace %h shifted replace key
127key_sright %i shifted right arrow
128key_sresume %j shifted resume key
129key_ssave !1 shifted save key
130key_suspend !2 shifted suspend key
131key_sundo !3 shifted undo key
132
133key_f0 k0 f0 (4) function key 0
134key_f1 k1 f1 function key 1
135key_f2 k2 f2 function key 2
136key_f3 k3 f3 function key 3
137key_f4 k4 f4 function key 4
138key_f5 k5 f5 function key 5
139key_f6 k6 f6 function key 6
140key_f7 k7 f7 function key 7
141key_f8 k8 f8 function key 8
142key_f9 k9 f9 function key 9
143key_f10 k; f10 (4) function key 10
144key_f11 F1 f11 function key 11
145 : : : :
146key_f35 FP f35 function key 35
147key_f36 FQ function key 36
148 : : : :
149key_f64 k1 function key 64
150
151(1) The terminfo documentation says this may be the 'insert character' or
152 `enter insert mode' key. Accordingly, key_ic is mapped to the `insertchar'
153 keysym if there is also a key_dc key; otherwise it's mapped to `insert'.
154 The presumption is that keyboards with `insert character' keys usually
155 have `delete character' keys paired with them.
156
157(2) If there is no key_next key but there is a key_npage key, key_npage
158 will be bound to the `next' keysym. If there is no key_previous key but
159 there is a key_ppage key, key_ppage will be bound to the `previous' keysym.
160
161(3) Sorry, these are not exact but they're the best we can do.
162
163(4) The uses of the "k0" capability are inconsistent; sometimes it
164 describes F10, whereas othertimes it describes F0 and "k;" describes F10.
eb8c3be9 165 Emacs attempts to politely accommodate both systems by testing for
9789a4be
ER
166 "k;", and if it is present, assuming that "k0" denotes F0, otherwise F10.
167-----------------------------------------------------------------------------
168
169 The following X keysyms do *not* have terminfo equivalents. These are
170the cookies your terminal package will have to set up itself, if you want them:
171
172 break
173 system
174 user
175 kp-backtab
176 kp-space
177 kp-tab
178 kp-f1
179 kp-f2
180 kp-f3
181 kp-f4
182 kp-multiply
183 kp-add
184 kp-separator
185 kp-subtract
186 kp-decimal
187 kp-divide
188 kp-0
189 kp-2
190 kp-4
191 kp-6
192 kp-8
193 kp-equal
194
195 In general, you should not bind any of the standard keysym names to
196functions in a terminal package. There's code in loaddefs.el that does that;
197the less people make exceptions to that, the more consistent an interface Emacs
198will have across different keyboards. Those exceptions should go in your
199.emacs file.
200
201 Finally, if you're using a USL UNIX or a Sun box or anything else with the
202USL version of curses(3) on it, bear in mind that the original curses(3) had
203(and still has) a very much smaller set of keycaps. In fact, the reliable
204ones were just the arrow keys and the first ten function keys. If you care
205about making your package portable to older Berkeley machines, don't count on
206the setup code to bind anything else.
207
208 If your terminal's arrow key sequences are so funky that they conflict with
209normal Emacs key bindings, the package should set up a function called
210(enable-foo-arrow-keys), where `foo' becomes the terminal name, and leave
211it up to the user's .emacs file whether to call it.
212
213 Before writing a terminal-support package, it's a good idea to read the
214existing ones and learn the common conventions.