Here are some ways to use the mouse as little as possible and to minimize stretch & use of keyboard in emacs. a) Get a trak ball instead (mine cost around $200, but it has a reasonably large ball). Of course, it's good to avoid using the trak ball as well. b) For emacs, I use xmodmap to change Alt and Compose to control keys (diamond already goes to meta by default). In my .xmodmap file, I have the following, which is used by doing a 'xmodmap ~/.xmodmap' in my x startup file. c) Use the xwrits typing break program. Binaries are in ~rph/bin/`uname -m', man page in ~rph/man and source in ~rph/misc. ! ---------------------------------------------- ! Sun Type 4 keyboard ! ! 20 Alt Graph 26 Alt 49 `~ 50 Back Space 73 Delete 74 Compose ! 83 Control 95 \| 96 Return 118 Linefeed 126 Caps Lock ! 127 Left Diamond 129 Right Diamond ! keycode 118 = quoteleft asciitilde keycode 49 = Return ! Down with backspace! keycode 50 = Delete ! More control keys keycode 26 = Control_L keycode 74 = Control_R add Control = Control_R add Control = Control_L ! ---------------------------------------------- c) Also in my .emacs, Also, this is in my .emacs: (if (fboundp 'menu-bar-mode) (progn (menu-bar-mode nil))) (This will turn off the menu bar, which I don't like since it requires a mouse). I also do a bunch of bindings of common functions. Unfortunately, key names change from machine to machine, or with X revisions, so you may have to use describe-key-briefly (which is bound to to M-/ on my emacs) to figure things out. Here are some example. (global-set-key [key-149] 'beginning-of-buffer) ; Home (global-set-key [key-156] 'end-of-buffer) ; End (global-set-key [prior] 'scroll-down) ; PgUp (global-set-key [next] 'scroll-up) ; PgDn (global-set-key [M-kp-prior] 'scroll-other-window-down) ; PgUp (global-set-key [M-next] 'scroll-other-window) ; PgDn (global-set-key [begin] 'hilit-recenter) ; 5 (global-set-key [M-C-left] 'backward-kill-word) (global-set-key [M-C-right] 'kill-word) (global-set-key [C-left] 'beginning-of-line) (global-set-key [C-right] 'end-of-line) (global-set-key [M-down] 'down-beginning) (global-set-key [M-up] 'up-beginning) (global-set-key [M-kp-enter] 'kill-line) There are more examples in my ~/.emacs file, which is readable. My favorite are the single-key save, find-sam-file (for the HMM software package I use a lot), make, and latex-buffer. d) I use twm, which allows substring matches for warp functions. You should be able to do this in fvwm as well -- but I haven't tried converting yet (if you're setting this up yourself, use fvwm). "F1" = : all : f.warpto "Mosaic" "F4" = : all : f.warpto "F4" "F5" = : all : f.warpto "F5" "F6" = : all : f.warpto "F6" "F7" = : all : f.warpto "F7" "F8" = : all : f.warpto "F8" "F9" = : all : f.warpto "xdvi" "F10" = : all : f.warpto "ghostview" "F11" = : all : f.warpto "xfig" "L9" = : all : f.warpto "F6" "L7" = : all : f.warpto "F5" "L5" = : all : f.warpto "F4" "L8" = : all : f.warpto "F8" "L10" = : all : f.warpto "F7" "R1" = : all : f.function "calend1" "R2" = : all : f.function "calend2" "R3" = : all : f.function "clearcalend" "R4" = : all : f.warpto "Calculator" "Help" = : all : f.iconify Function "calend1" { f.warpto "Calendar Manager" } Function "calend2" { f.warpto "CM Appointment Editor" } Function "clearcalend" { f.warpto "Calendar Manager" f.iconify } e) For xterms, in my .xrdb (and then xrdb ~/.xrdb in my xstartup routine), I bind the scroll keys as follows: xterm*translations: #override \ KP_Next: scroll-forw(1,page)\n\ KP_Prior: scroll-back(1,page) But one can do even better with things like... xterm*translations: #override \ KP_Next: scroll-forw(1,page)\n\ KP_Prior: scroll-back(1,page)\n\ Meta Find: string("\n~a\n.\n")\n\ Find: string("\nRichard\n.\n")\n\ Meta SunCut: string("qdp\n")\n\ SunCut: string("dp\n")\n\ SunOpen: string("r\n\n~m\n~v\n")\n\ Meta F3: string("xrn &\n")\n\ F3: string("netscape &\n")\n\ Meta F2: string("cd $sam\n")\n\ Ctrl F2: string("cd $prot\n")\n\ Shift F2: string("c1\n")\n\ F2: string("cd ~\n")\n\ Here, I use the string function to insert things like 'autograph this mail and then send it", or "respond to this mail, include the mail I'm responding to, and then open up emacs on it", and so on. f) And for those interested, here's how to stick $cwd in your title bar, using tcsh: if ($term != xterm) then alias cwdcmd 'echo $cwd' else if ($?FNKEY) then alias cwdcmd 'echo $cwd; echo -n "]0;"$FNKEY" "$host" "$cwd:t""' else alias cwdcmd 'echo $cwd; echo -n "]0;"$host" "$cwd:t" "' endif alias pwd cwdcmd