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