home *** CD-ROM | disk | FTP | other *** search
/ Caldera Network Desktop 1.0 / caldera-network-desktop-1.0.bin / doc / HOWTO / mini / Key-Setup < prev    next >
Text File  |  1995-12-04  |  20KB  |  650 lines

  1.   Linux Keyboard Setup Mini-Howto
  2.   Stephen Lee, sl14@cornell.edu
  3.   Version 1.3, 16 Sep 1995
  4.  
  5.   This Mini-HOWTO document describes setting up the kernel and applica-
  6.   tions to handle the Cursor control keys.
  7.  
  8.   1.  Introduction
  9.  
  10.  
  11.   It has been annoying to me that cursor keys had not work consistently
  12.   across different programs (and on different machines), so I took some
  13.   time and tried to fix all that.  Here I document my experience so
  14.   others would not need to go through the same tedious cycle I did.
  15.  
  16.   I'm using Slackware 2.0.1, so pathnames to files might be different
  17.   from yours if you are using a different distribution.
  18.  
  19.   Some of the material here appeared in an earlier ``BackSpace Mini-
  20.   HOWTO''.  Although the method described there still works, I consider
  21.   this a better solution.
  22.  
  23.  
  24.   1.1.    Typography
  25.  
  26.  
  27.  
  28.   o  This is a program name.
  29.  
  30.   o  This is a ``command'' you'd type on a keyboard.
  31.  
  32.   o  This is a <Key> on the keyboard.  eg. <BackSpace>, <Delete>,
  33.      <Shift-l>, <Ctrl-q> etc.
  34.  
  35.   o  This is an [X11 Keysym] which you can use for mapping keys under X.
  36.      eg. [BackSpace], [Delete], [Left], [Home] etc.
  37.  
  38.  
  39.   1.2.    Terminalogy
  40.  
  41.  
  42.  
  43.      ESC
  44.     ASCII character 0x1B.
  45.  
  46.  
  47.      BS ASCII character 0x08, or control-h.
  48.  
  49.  
  50.      DEL
  51.     ASCII character 0x7F.
  52.  
  53.  
  54.      ^D ASCII character 0x04, or control-d.
  55.  
  56.  
  57.      VC A Linux Virtual Console.
  58.  
  59.  
  60.  
  61.  
  62.   1.3.    Acknowledgements
  63.  
  64.  
  65.   Thanks to the following people who commented on my ``BackSpace Mini-
  66.   HOWTO'':
  67.   John Copella, Andrew Rakowski, Dr. Jacques Gelinas, Michael Bischoff,
  68.   Topher Hughes, Chuck Meyer, Alexis Kotte, and especially Ted Stern and
  69.   Steve Dunham.
  70.  
  71.   Thanks to Jamie Zawinski from Netscape Communications for pointing out
  72.   the correct fix for the Backspace problem in Motif applications, and
  73.   for the xkeycaps(1) program.
  74.  
  75.  
  76.   2.  Non-X configuration
  77.  
  78.  
  79.   I assume you came from the DOS world like I did, and is used to the
  80.   mapping of function that <BackSpace> deletes character to the left of
  81.   the cursor and <Delete> deletes character on top of the cursor.
  82.  
  83.   Under a shell, the most intuitive mapping is <BackSpace> -> BS and
  84.   <Delete> -> DEL.  This is fine unless you want to use EMACS. EMACS map
  85.   <Ctrl-h> to its help function, which, under ASCII, is unfortunately
  86.   BS.  So each time you want to erase a character backwards, you invoke
  87.   the help system.  Also, DEL under Emacs deletes BACKWARDS, like what
  88.   you'd expect for BS.
  89.  
  90.   One choice is to remap the keys under Emacs.    Unfortunately you'll
  91.   lose the ``<Ctrl-h> = help'' mapping.     So, I decided to map
  92.   <BackSpace> -> DEL.  This leaves BS for use by <Ctrl-h> in Emacs.
  93.  
  94.   So, now what shall we do for the <Delete> key?  In a previous verion
  95.   of this document I used ^D, which works under both Emacs and csh/tcsh
  96.   as a ``Delete character on cursor'' function.     But since then I've
  97.   found a better solution.  The kernel by default maps <Delete> as the
  98.   VT100 ``Remove'' key sequence (``ESC[3~'').  It is not hard to teach
  99.   Emacs and tcsh to recognize it.  The advantage is that you can bind it
  100.   differently than <Ctrl-d> in programs.  Also, it is more consistent if
  101.   you also map other cursor control keys.  The disadvantage is that you
  102.   might not be able to use it in some application which you can't bind
  103.   key sequences (but than apply to the <Delete> -> ^D binding as well).
  104.  
  105.  
  106.   2.1.    Linux console
  107.  
  108.  
  109.   Linux console key bindings are controlled by the kernel.  The kernel
  110.   by default generates the correct bindings for <Backspace> and
  111.   <Delete>, so you should not need to change that.
  112.  
  113.   However, if you do, the following programs (in the 'kbd' package,
  114.   which should come with Slackware already) affect the key bindings:
  115.  
  116.  
  117.  
  118.      showkeys
  119.     ``showkeys'' shows the Linux keycode generated by a key. The
  120.     keycode can then be used by loadkeys(1) to change the keymap.
  121.  
  122.  
  123.      dumpkeys
  124.     Shows the current keybindings. See the manual page for more
  125.     detail.
  126.  
  127.  
  128.      loadkeys
  129.     ``loadkeys file'' loads keybindings from file ``file''. Note
  130.     that this changes the key bindings for ALL virtual consoles.
  131.     This is usually done at boot time in /etc/rc.d/rc.local.
  132.  
  133.     You can start with one of the keytable files in
  134.     /usr/lib/kbd/keytables/*.map and edit that. The one that is
  135.     compiled into your kernel would be
  136.     /usr/src/linux/drivers/char/defkeymap.map if you have the kernel
  137.     source. The format of the file is described in the keytables(5)
  138.     manual page.
  139.  
  140.     The keys of particular interest are <BackSpace> (keycode 14),
  141.     <Delete> (111).
  142.  
  143.  
  144.      setmetamode
  145.     ``setmetamode'' controls whether the keystroke <Alt-x>, where x
  146.     is some key, would send the keycode M-x or the key sequence ESC
  147.     followed by x. This is virtual-console-specific, you can have
  148.     different setting in different virtual consoles.
  149.  
  150.  
  151.  
  152.   2.2.    tty (including the Linux console)
  153.  
  154.  
  155.   ``stty erase <ch>'' tells the terminal what character your <BackSpace>
  156.   key generates.  It does NOT change your key bindings.     If you map
  157.   <BackSpace> to DEL then do a ``stty erase '^H''' it won't magically
  158.   changes your <BackSpace> key to generate ^H; it would only confuse
  159.   your computer.
  160.  
  161.   To correctly set your terminal ``erase'' character to DEL, type ``stty
  162.   erase '^?''' (where ^? can be '^' followed by '?' or <Ctrl-v>
  163.   <BackSpace>) at your shell prompt.  You might want to put this in your
  164.   $(HOME)/.cshrc or $(HOME)/.profile.
  165.  
  166.   Note: although csh/tcsh treats BS and DEL the same way, other programs
  167.   don't.  So your mapping might seem to work under csh/tcsh but you get
  168.   wierd stuff like ^? under some programs.  Solution: remember the
  169.   ``stty'' command above.
  170.  
  171.  
  172.   2.3.    Shells
  173.  
  174.  
  175.  
  176.   2.3.1.  tcsh
  177.  
  178.  
  179.   tcsh provides the command ``bindkey'' for binding keys:
  180.  
  181.  
  182.      bindkey
  183.     lists all current bindings.
  184.  
  185.  
  186.      bindkey ``str'' function
  187.     binds input string ``str'' to ``function''.  A list of tcsh
  188.     functions can be obtained by ``bindkey -l''.
  189.  
  190.  
  191.      bindkey -k <up | down | left | right> function
  192.     binds an arrow key to ``function''.
  193.  
  194.  
  195.   Example: To bind cursor control keys, put this in $HOME/.cshrc:
  196.  
  197.  
  198.  
  199.   ______________________________________________________________________
  200.       if ($term == "xterm" || $term == "vt100" \
  201.         || $term == "vt102" || $term !~ "con*") then
  202.       # bind keypad keys for console, vt100, vt102, xterm
  203.       bindkey "\e[1~" beginning-of-line  # Home
  204.       bindkey "\e[2~" overwrite-mode     # Ins
  205.       bindkey "\e[3~" delete-char         # Delete
  206.       bindkey "\e[4~" end-of-line         # End
  207.       endif
  208.   ______________________________________________________________________
  209.  
  210.  
  211.  
  212.   See the man page for tcsh(1) for a complete description.
  213.  
  214.   Example: You can have 4DOS-style command history under tcsh with the
  215.   tcsh function-pair history-search-backward (Meta-p) and history-
  216.   search-forward (Meta-n).  Typing ``abc<Meta-p>'' will only show lines
  217.   in history that start with ``abc''.  Also, function magic-space
  218.   expands !  histories as you type, and I prefer them over the default
  219.   so I bound them to the up/down arrow keys and space:
  220.  
  221.  
  222.   ______________________________________________________________________
  223.       bindkey -k up history-search-backward
  224.       bindkey -k down history-search-forward
  225.       bindkey " " magic-space
  226.   ______________________________________________________________________
  227.  
  228.  
  229.  
  230.  
  231.   2.3.2.  bash
  232.  
  233.  
  234.   The ``.inputrc'' file contains the list of key bindings to functions.
  235.  
  236.   For example, if you put the following line in $HOME/.inputrc:
  237.  
  238.  
  239.   ______________________________________________________________________
  240.       "\e[1~": beginning-of-line
  241.       "\e[3~": delete-char
  242.       "\e[4~": end-of-line
  243.   ______________________________________________________________________
  244.  
  245.  
  246.  
  247.   It will map the <Home>, <Delete>, and <End> keys respectively to the
  248.   corresponding functions.
  249.  
  250.   You might also need the following line if your <BackSpace> key sends
  251.   the ASCII DEL:
  252.  
  253.  
  254.   ______________________________________________________________________
  255.       DEL: backward-delete-char
  256.   ______________________________________________________________________
  257.  
  258.  
  259.  
  260.   You probably don't need it (I don't), but it's worth a try if you run
  261.   into trouble.
  262.  
  263.  
  264.  
  265.   2.4.    Editors
  266.  
  267.  
  268.  
  269.   2.4.1.  Emacs 19
  270.  
  271.  
  272.   Emacs 19 provides the elisp function define-key for binding keys.  You
  273.   can bind a key sequence to a function key like this in $(HOME)/.emacs:
  274.  
  275.  
  276.   ______________________________________________________________________
  277.       ;; map function keys on PC keyboard
  278.       (setq term (getenv "TERM"))
  279.       (if (or
  280.        (string= "xterm" term)
  281.        (string= "con" (substring term 0 3)) ; linux consoles
  282.        (string= "vt100" term)
  283.        (string= "vt102" term))
  284.       (progn
  285.         (defun my-setkey-hook ()
  286.           (define-key function-key-map "\e[1~" [home])
  287.           (define-key function-key-map "\e[2~" [insert])
  288.           (define-key function-key-map "\e[3~" [delete])
  289.           (define-key function-key-map "\e[4~" [end])
  290.           ;; these are just my own sequences
  291.           ;; so I can use the keys under Emacs
  292.           (define-key function-key-map "\e[40~" [C-prior])
  293.           (define-key function-key-map "\e[41~" [C-next])
  294.           ;; function keys: use same mapping as xterm
  295.           (define-key function-key-map "\e[11~" [f1])
  296.           (define-key function-key-map "\e[12~" [f2])
  297.       ;; ...
  298.           (define-key function-key-map "\e[24~" [f12])
  299.           (define-key function-key-map "\e[25~" [S-f1])
  300.           (define-key function-key-map "\e[26~" [S-f2])
  301.       ;; ...
  302.           (define-key function-key-map "\e[39~" [S-f12])
  303.           )
  304.         (add-hook 'term-setup-hook 'my-setkey-hook)
  305.         )
  306.     ()
  307.     )
  308.   ______________________________________________________________________
  309.  
  310.  
  311.  
  312.   Note the function key names are all in lowercase.
  313.  
  314.   You can also bind function keys (or key sequences, but we won't be
  315.   using that here) to a emacs command with global-set-key like this:
  316.  
  317.  
  318.   ______________________________________________________________________
  319.       (global-set-key [delete] 'delete-char)
  320.       (global-set-key [home] 'beginning-of-line)      ; you might not want this
  321.       (global-set-key [end] 'end-of-line)          ; nor this
  322.       (global-set-key [C-prior] 'beginning-of-buffer)
  323.       (global-set-key [C-next] 'end-of-buffer)
  324.  
  325.       (global-set-key [f1] 'help-for-help)
  326.       ;; ...
  327.       (global-set-key [S-f12] 'info)
  328.   ______________________________________________________________________
  329.  
  330.  
  331.   2.4.2.  vi
  332.  
  333.  
  334.   Anybody want to write this?
  335.  
  336.  
  337.   2.5.    Other Programs
  338.  
  339.  
  340.  
  341.   2.5.1.  less
  342.  
  343.  
  344.   lesskey(1) allows you to map keys for the less(1) pager.  Put the
  345.   following lines in your $HOME/.lessrc (this is for VT100-like
  346.   terminals):
  347.  
  348.  
  349.   ______________________________________________________________________
  350.       ^[[A   back-line
  351.       ^[[B   forw-line
  352.       ^[[C   next-file
  353.       ^[[D   prev-file
  354.       ^[OA   back-line
  355.       ^[OB   forw-line
  356.       ^[OC   next-file
  357.       ^[OD   prev-file
  358.       ^[[6~  forw-scroll
  359.       ^[[5~  back-scroll
  360.       ^[[1~  goto-line
  361.       ^[[4~  goto-end
  362.   ______________________________________________________________________
  363.  
  364.  
  365.  
  366.   replacing '^[' with the ESC character (ASCII 0x1B), then run ``lesskey
  367.   .lessrc'' in your home directory.  You can then use the cursor pad
  368.   keys for scrolling text under less(1).
  369.  
  370.  
  371.  
  372.   3.  X configuration
  373.  
  374.  
  375.   Under the X windows system, every key can have a different keysym
  376.   assigned to it, instead of just an ASCII value of key sequence.  Thus,
  377.   X applications can distinguish easily between, for example, <Tab>
  378.   (which generates the [Tab] keysym) and <Ctrl-i> (which generates the
  379.   [i] keysym with the "Ctrl" modifier).
  380.  
  381.   One consequence is that we want <BackSpace> to generate the
  382.   [BackSpace] keysym.  However, on most systems <BackSpace> as well as
  383.   <Delete> generate the [Delete] keysym by default due to the way the
  384.   XFree86 server is written (it reads the settings from Linux's key
  385.   map).     This makes the two keys indistinguishable.  This is the number
  386.   1 cause in the ``Backspace doesn't work in my X application'' problem.
  387.   See the entry for xmodmap(1) or xkeycaps(1) for a fix.
  388.  
  389.   A list of keysyms can be found in <X11/keysymdef.h> (usually
  390.   /usr/include/X11/keysymdef.h), without the XK_ prefix, and also
  391.   /usr/lib/X11/XKeysymDB.  Note X keysyms are case sensitive.
  392.  
  393.   There are several modifiers (like ``Shift'' and ``Ctrl'') that can be
  394.   generated under X: Shift, Ctrl, Meta, Alt, Super and Hyper.  Note that
  395.   although ``Alt'' is present, most of the time the <Alt> key on the PC
  396.   keyboard is bound to the ``Meta'' modifier; it works with more
  397.   applications this way.
  398.  
  399.  
  400.   3.1.    X server
  401.  
  402.  
  403.  
  404.      xev
  405.     xev(1) allows you to see events generated on a window, including
  406.     <KeyPress> and <KeyRelease> events where you can find the
  407.     keycode for a particular key.  Once the keycode is found for a
  408.     key it can be mapped into a X11 keysym with xmodmap.
  409.  
  410.  
  411.      xkeycaps
  412.     From the README file:
  413.  
  414.     xkeycaps is a graphical front-end to xmodmap.  It opens a window
  415.     that looks like a keyboard; moving the mouse over a key shows
  416.     what KeySyms and Modifier bits that key generates.  Clicking on
  417.     a key simulates KeyPress/KeyRelease events on the window of your
  418.     choice.     It is possible to change the KeySyms and Modifiers
  419.     generated by a key through a mouse-based interface.  This
  420.     program can also write an input file for xmodmap to recreate
  421.     your changes in future sessions.  See the man page for more
  422.     details.
  423.  
  424.     The latest version of xkeycaps is always ftpable from ftp.x.org.
  425.     You can also get it from my web page at this place
  426.     (http://www.netscape.com/people/jwz/).
  427.  
  428.  
  429.      xmodmap
  430.     One of the function of xmodmap(1) is to map X keycodes to
  431.     keysyms.
  432.  
  433.     ``xmodmap <file>'' reads the keycode -> keysym table from the
  434.     file ``file'' (usually named .xmodmaprc or .Xmodmap in the
  435.     user's home directory).     This is usually done by xinit(1) or
  436.     startx(1) when X starts up.
  437.  
  438.     By default, Slackware loads the file $HOME/.Xmodmap if it is
  439.     present; so putting the following two lines in it should fix
  440.     most problems.    Otherwise, read on.
  441.  
  442.  
  443.     ________________________________________________________________
  444.         keycode 22 = BackSpace
  445.         keycode 107 = Delete
  446.     ________________________________________________________________
  447.  
  448.  
  449.  
  450.      ``xmodmap -e "command"'' can be used to execute a single xmodmap
  451.      command, for simple changes.
  452.  
  453.      For example, you can put the the following lines in $HOME/.xinitrc
  454.      instead of using the $HOME/.Xmodmap file:
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.      ___________________________________________________________________
  464.      # map the <BackSpace> key to the [BackSpace] keysym.
  465.      xmodmap -e "keycode 22 = BackSpace"
  466.      # map the <Delete> key to the [Delete] keysym.
  467.      xmodmap -e "keycode 107 = Delete"
  468.      ___________________________________________________________________
  469.  
  470.  
  471.  
  472.      (Warning: X exits when the last line of .xinitrc finishes, so if
  473.      you don't have a .xinitrc before, you must put something that will
  474.      continue to run (like the window manager or an xterm) at the end of
  475.      .xinitrc, and don't put it in the background!)
  476.  
  477.      Lastly, you might generate a map file from your loadkey(1) *.map
  478.      file using ``/usr/lib/kbd/keytables/mk_modmap foo.map > foo.xmap'';
  479.      you need to remove all the ``compose'' command in the output.  Note
  480.      that <BackSpace> would be mapped to the [Delete] keysym if you
  481.      start with the keymap provided, so be sure to edit foo.xmap for
  482.      keycode 22 (BackSpace) and 107 (Delete).
  483.  
  484.  
  485.  
  486.   3.2.    X applications
  487.  
  488.  
  489.   X applications are usually configurated via resources.  User
  490.   customizations are usually put in $HOME/.Xdefaults and loaded via
  491.   ``xrdb -load $HOME/.Xdefaults'' in .xinitrc (again, see the warning in
  492.   the xmodmap entry).
  493.  
  494.  
  495.   3.2.1.  Terminal Emulators
  496.  
  497.  
  498.  
  499.   3.2.1.1.  xterm family
  500.  
  501.  
  502.   Key mappings can be changed like this in $(HOME)/.Xresources:
  503.  
  504.   ______________________________________________________________________
  505.       *VT100.Translations: #override <Key>BackSpace: string(0x7F)\n\
  506.           <Key>Delete:      string(0x1b) string("[3~")\n\
  507.           <Key>Home:      string(0x1b) string("[1~")\n\
  508.           <Key>End:          string(0x1b) string("[4~")\n\
  509.           Ctrl<Key>Prior:      string(0x1b) string("[40~")\n\
  510.           Ctrl<Key>Next:      string(0x1b) string("[41~")
  511.   ______________________________________________________________________
  512.  
  513.  
  514.  
  515.   This applies to most xterm-based emulators (xterm, color_xterm, kterm
  516.   etc. but not rxvt).
  517.  
  518.  
  519.   3.2.1.2.  rxvt
  520.  
  521.  
  522.   There is apparaently no way to remap keys in rxvt except by patching
  523.   the source.  Any proof to the contrary would be welcome.
  524.  
  525.  
  526.  
  527.  
  528.  
  529.   3.2.2.  Editors
  530.  
  531.  
  532.  
  533.   3.2.2.1.  FSF Emacs 19
  534.  
  535.  
  536.   global-set-key can be used to map keys to Emacs commands.  See the
  537.   Emacs 19 entry in the non-X section.    To find out what emacs symbol a
  538.   key sends, press the key in question (in a scratch buffer so it won't
  539.   clobber up your files) and then use the Emacs command view-lossage
  540.   (usually <Ctrl-h> <l>) to see what the key generated.
  541.  
  542.   Usually the symbol is the X11 keysym in lowercase; for example,
  543.   <Insert> (which generates the [Insert] keysym) would be [insert] in
  544.   Emacs.
  545.  
  546.   <Shift-fkey>, <Ctrl-fkey>, <Meta-fkey> generates [S-fkey], [C-fkey],
  547.   and [M-fkey] respectively.  Combinations generate something like [C-M-
  548.   fkey].  Other modifiers are s- for "Super", H- for "Hyper" and A- for
  549.   "Alt".
  550.  
  551.  
  552.   3.2.2.2.  XEmacs
  553.  
  554.  
  555.   Again, use define-key or global-set-key.  I believe both the [keysym]
  556.   method as in FSF Emacs or 'keysym (like below) work.    The method of
  557.   specifying <Ctrl-fkey> etc. is different; both [(control fkey)] or
  558.   '(control fkey) should work.    But note that <Ctrl-A> is '(control a)
  559.   while <Ctrl-Shift-A> is '(control A).     Save '(shift fkey) for non-
  560.   alphabet keys.
  561.  
  562.  
  563.   ______________________________________________________________________
  564.   (define-key global-map 'delete 'delete-char)
  565.   (define-key global-map 'backspace 'backward-delete-char-untabify)
  566.   (define-key global-map '(control prior) 'fkey-beginning-of-buffer)
  567.   (define-key global-map '(control next)  'fkey-end-of-buffer)
  568.   (define-key global-map '(control home)  'fkey-scroll-right)
  569.   (define-key global-map '(control end)      'fkey-scroll-left)
  570.  
  571.   (global-set-key 'f1 'help-for-help)
  572.   (global-set-key 'f3 'isearch-forward)
  573.   (global-set-key 'f4 'query-replace-regexp)
  574.   (global-set-key '(shift f1) 'info)
  575.   (global-set-key '(shift f3) 'isearch-backward)
  576.   ______________________________________________________________________
  577.  
  578.  
  579.  
  580.   Sometimes the <Delete> key doesn't delete forward after changing a
  581.   major mode even if you remapped it like the above.  Then you might
  582.   need to remap it in the keymap for that major mode like the example
  583.   below:
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.   ______________________________________________________________________
  596.   ;;
  597.   ;; Lisp modes setup
  598.   ;;
  599.   (defun my-lisp-mode-common-hook ()
  600.        (define-key shared-lisp-mode-map 'backspace
  601.          'backward-delete-char-untabify)
  602.        (define-key shared-lisp-mode-map 'delete      'delete-char)
  603.        )
  604.  
  605.   (add-hook 'lisp-mode-hook 'my-lisp-mode-common-hook)
  606.   (add-hook 'emacs-lisp-mode-hook 'my-lisp-mode-common-hook)
  607.   (add-hook 'lisp-interaction-mode-hook 'my-lisp-mode-common-hook)
  608.   ______________________________________________________________________
  609.  
  610.  
  611.  
  612.  
  613.   3.2.3.  Other Programs
  614.  
  615.  
  616.  
  617.   3.2.3.1.  Motif applications (e.g. Mosaic, Netscape)
  618.  
  619.  
  620.   <BackSpace> should work in Motif applications if it generates the
  621.   [BackSpace] keysym.  See the entry for xmodmap(1).
  622.  
  623.   Previous version of this document suggested a fix using
  624.   *XmText.translations or *XmTextField.translations resources.    This is
  625.   not recommended anymore as it would break other things.  See the
  626.   netscape FAQ for X
  627.   (http://home.netscape.com/eng/mozilla/1.1/faq_navx.html)
  628.  
  629.  
  630.   4.  For more information
  631.  
  632.  
  633.   ``kbd.FAQ'' in the kbd package
  634.   (ftp://sunsite.unc.edu/pub/Linux/system/Keyboards/kbd-0.89.tar.gz)
  635.   contains more examples on remapping the keyboard.
  636.  
  637.   Man pages for the programs mentioned above are good sources of
  638.   information, especially xterm(1x), xmodmap and stty(1).
  639.  
  640.   Info pages for Emacs tells you how to remap keys under it; use ``emacs
  641.   -f info'' to read them.
  642.  
  643.   ``Keystroke-mini-HOWTO
  644.   (ftp://sunsite.unc.edu/pub/Linux/doc/HOWTO/mini/Keystroke)'' describes
  645.   a way to assign special action to some of the keys on the keyboard.
  646.  
  647.   ``the netscape FAQ
  648.   (http://home.netscape.com/eng/mozilla/1.1/faq_navx.html#x12)'' has a
  649.   solution for the ``Backspace doesn't work in Netscape'' problem.
  650.