diff options
author | Eric S. Raymond <esr@snark.thyrsus.com> | 1993-03-18 22:31:30 +0000 |
---|---|---|
committer | Eric S. Raymond <esr@snark.thyrsus.com> | 1993-03-18 22:31:30 +0000 |
commit | 75bb4f6536ae8ac7bbff11b38159919c966f402b (patch) | |
tree | 39675fa886b2fe7b5612fd1d3adb7d14e465e8bf | |
parent | 891274e1fd244a03fc4a4ab9ff8a0172964fbc95 (diff) | |
download | emacs-75bb4f6536ae8ac7bbff11b38159919c966f402b.tar.gz |
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 @@ +Things useful to do for GNU Emacs: + +* Primitive for random access insertion of part of a file. + +* Making I/O streams for files, so that read and prin1 can + be used on files directly. The I/O stream itself would + serve as a function to read or write one character. + +* If a file you can't write is in a directory you can write, + make sure it works to modify and save this file. + +* Make dired's commands handle correctly the case where + ls has listed several subdirectories' contents. + It needs to be able to tell which directory each file + is really in, by searching backward for the line + which identifies the start of a directory. + +* Add more dired commands, such as sorting (use the + sort utility through call-process-region). + +* Make display.c record inverse-video-ness on + a character by character basis. Then make non-full-screen-width + mode lines inverse video, and display the marked location in + inverse video. + +* 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 @@ + This directory contains files of elisp that customize Emacs for certain +terminal types. When Emacs starts, it checks the TERM environment variable to +see what type of terminal the user is running on, checks for an elisp file +named "term/${TERM}.el", and if one exists, loads it. + + When writing terminal packages, there are some things it is good to keep in +mind. + + First, about keycap names. Your terminal package can create any keycap +cookies it likes, but there are good reasons to stick to the set recognized by +the X-windows code whenever possible. The X key symbols recognized by Emacs +are listed in src/term.c; look for the string `keys' in that file. + + For one thing, it means that you'll have the same Emacs key bindings on in +terminal mode as on an X console. If there are differences, you can bet +they'll frustrate you after you've forgotten about them. + + For another, the X keysms provide a standard set of names that Emacs knows +about. It tries to bind many of them to useful things at startup, before your +.emacs is read (so you can override them). In some ways, the X keysym standard +is a admittedly poor one; it's incomplete, and not well matched to the set of +`virtual keys' that UNIX terminfo(3) provides. But, trust us, the alternatives +were worse. + + This doesn't mean that if your terminal has a "Cokebottle" key you shouldn't +define a [cokebottle] keycap. But if you must define cookies that aren't in +that set, try to pattern them on the standard terminfo variable names for +clarity; also, for a fighting chance that your binding may be useful to someone +else someday. + + For example, if your terminal has a `find' key, observe that terminfo +supports a key_find capability and call your cookie [key-find]. + +Here is a complete list, with corresponding X keysyms. + +----------------------------------------------------------------------------- +Variable name cap X Keysym Description +-------------- --- ------------ ------------------------------------- +key_down kd down Sent by terminal down arrow key +key_up ku up Sent by terminal up arrow key +key_left kl left Sent by terminal left arrow key +key_right kr right Sent by terminal right arrow key +key_home kh home Sent by home key. +key_backspace kb Sent by backspace key +key_dl kd deleteline Sent by delete line key. +key_il kA insertline Sent by insert line. +key_dc kD Sent by delete character key. +key_ic kI insertchar (1) Sent by ins char/enter ins mode key. +key_eic KM Sent by rmir or smir in insert mode. +key_clear kC Sent by clear screen or erase key. +key_eos kS Sent by clear-to-end-of-screen key. +key_eol kE Sent by clear-to-end-of-line key. +key_sf kF Sent by scroll-forward/down key +key_sr kR Sent by scroll-backward/up key +key_npage kN next (2) Sent by next-page key +key_ppage kP prior (2) Sent by previous-page key +key_stab kT Sent by set-tab key +key_ctab kt Sent by clear-tab key +key_catab ka Sent by clear-all-tabs key. +key_enter @8 kp-enter Enter/send (unreliable) +key_print %9 print print or copy +key_ll kH Sent by home-down key +key_a1 K1 kp-1 Upper left of keypad +key_a3 K3 kp-3 Upper right of keypad +key_b2 K2 kp-5 Center of keypad +key_c1 K4 kp-7 Lower left of keypad +key_c3 K5 kp-9 Lower right of keypad +key_btab kB backtab Back tab key +key_beg @1 begin beg(inning) key +key_cancel @2 cancel cancel key +key_close @3 close key +key_command @4 execute (3) cmd (command) key +key_copy @5 copy key +key_create @6 create key +key_end @7 end end key +key_exit @9 exit key +key_find @0 find key +key_help %1 help key +key_mark %2 mark key +key_message %3 message key +key_move %4 move key +key_next %5 next (2) next object key +key_open %6 open key +key_options %7 menu (3) options key +key_previous %8 previous (2) previous object key +key_redo %0 redo redo key +key_reference &1 ref(erence) key +key_refresh &2 refresh key +key_replace &3 replace key +key_restart &4 reset (3) restart key +key_resume &5 resume key +key_save &6 save key +key_sbeg &9 shifted beginning key +key_select *6 select select key +key_suspend &7 suspend key +key_undo &8 undo undo key + +key_scancel &0 shifted cancel key +key_scommand *1 shifted command key +key_scopy *2 shifted copy key +key_screate *3 shifted create key +key_sdc *4 shifted delete char key +key_sdl *5 shifted delete line key +key_send *7 shifted end key +key_seol *8 shifted clear line key +key_sexit *9 shifted exit key +key_sf kF shifted find key +key_shelp #1 shifted help key +key_shome #2 shifted home key +key_sic #3 shifted input key +key_sleft #4 shifted left arrow key +key_smessage %a shifted message key +key_smove %b shifted move key +key_snext %c shifted next key +key_soptions %d shifted options key +key_sprevious %e shifted prev key +key_sprint %f shifted print key +key_sredo %g shifted redo key +key_sreplace %h shifted replace key +key_sright %i shifted right arrow +key_sresume %j shifted resume key +key_ssave !1 shifted save key +key_suspend !2 shifted suspend key +key_sundo !3 shifted undo key + +key_f0 k0 f0 (4) function key 0 +key_f1 k1 f1 function key 1 +key_f2 k2 f2 function key 2 +key_f3 k3 f3 function key 3 +key_f4 k4 f4 function key 4 +key_f5 k5 f5 function key 5 +key_f6 k6 f6 function key 6 +key_f7 k7 f7 function key 7 +key_f8 k8 f8 function key 8 +key_f9 k9 f9 function key 9 +key_f10 k; f10 (4) function key 10 +key_f11 F1 f11 function key 11 + : : : : +key_f35 FP f35 function key 35 +key_f36 FQ function key 36 + : : : : +key_f64 k1 function key 64 + +(1) The terminfo documentation says this may be the 'insert character' or + `enter insert mode' key. Accordingly, key_ic is mapped to the `insertchar' + keysym if there is also a key_dc key; otherwise it's mapped to `insert'. + The presumption is that keyboards with `insert character' keys usually + have `delete character' keys paired with them. + +(2) If there is no key_next key but there is a key_npage key, key_npage + will be bound to the `next' keysym. If there is no key_previous key but + there is a key_ppage key, key_ppage will be bound to the `previous' keysym. + +(3) Sorry, these are not exact but they're the best we can do. + +(4) The uses of the "k0" capability are inconsistent; sometimes it + describes F10, whereas othertimes it describes F0 and "k;" describes F10. + Emacs attempts to politely accomodate both systems by testing for + "k;", and if it is present, assuming that "k0" denotes F0, otherwise F10. +----------------------------------------------------------------------------- + + The following X keysyms do *not* have terminfo equivalents. These are +the cookies your terminal package will have to set up itself, if you want them: + + break + system + user + kp-backtab + kp-space + kp-tab + kp-f1 + kp-f2 + kp-f3 + kp-f4 + kp-multiply + kp-add + kp-separator + kp-subtract + kp-decimal + kp-divide + kp-0 + kp-2 + kp-4 + kp-6 + kp-8 + kp-equal + + In general, you should not bind any of the standard keysym names to +functions in a terminal package. There's code in loaddefs.el that does that; +the less people make exceptions to that, the more consistent an interface Emacs +will have across different keyboards. Those exceptions should go in your +.emacs file. + + Finally, if you're using a USL UNIX or a Sun box or anything else with the +USL version of curses(3) on it, bear in mind that the original curses(3) had +(and still has) a very much smaller set of keycaps. In fact, the reliable +ones were just the arrow keys and the first ten function keys. If you care +about making your package portable to older Berkeley machines, don't count on +the setup code to bind anything else. + + If your terminal's arrow key sequences are so funky that they conflict with +normal Emacs key bindings, the package should set up a function called +(enable-foo-arrow-keys), where `foo' becomes the terminal name, and leave +it up to the user's .emacs file whether to call it. + + Before writing a terminal-support package, it's a good idea to read the +existing ones and learn the common conventions. |