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