README 11 KB

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