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