Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ xmodmap(1) — BSD/386 1.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

X(1)

xev(1)



XMODMAP(1)                                             XMODMAP(1)


NAME
       xmodmap - utility for modifying keymaps in X

SYNOPSIS
       xmodmap [-options ...] [filename]

DESCRIPTION
       The  xmodmap  program is used to edit and display the key-
       board modifier map and  keymap  table  that  are  used  by
       client   applications   to  convert  event  keycodes  into
       keysyms.  It  is  usually  run  from  the  user's  session
       startup script to configure the keyboard according to per-
       sonal tastes.

OPTIONS
       The following options may be used with xmodmap:

       -display display
               This option specifies the host and display to use.

       -help   This  option indicates that a brief description of
               the command line arguments should  be  printed  on
               the  standard  error  channel.   This will be done
               whenever  an  unhandled  argument  is   given   to
               xmodmap.

       -grammar
               This option indicates that a help message describ-
               ing the expression grammar used in files and  with
               -e  expressions  should be printed on the standard
               error.

       -verbose
               This option indicates that  xmodmap  should  print
               logging information as it parses its input.

       -quiet  This  option  turns off the verbose logging.  This
               is the default.

       -n      This option  indicates  that  xmodmap  should  not
               change  the  mappings,  but should display what it
               would  do,  like  make(1)  does  when  given  this
               option.

       -e expression
               This  option  specifies  an  expression to be exe-
               cuted.  Any number of expressions may be specified
               from the command line.

       -pm     This  option  indicates  that the current modifier
               map should be printed on the standard output.

       -pk     This option  indicates  that  the  current  keymap
               table should be printed on the standard output.



X Version 11                Release 5                           1




XMODMAP(1)                                             XMODMAP(1)


       -pke    This  option  indicates  that  the  current keymap
               table should be printed on the standard output  in
               the  form  of  expressions that can be fed back to
               xmodmap.

       -pp     This option indicates that the current pointer map
               should be printed on the standard output.

       -       A  lone  dash means that the standard input should
               be used as the input file.

       The filename specifies a file containing  xmodmap  expres-
       sions  to  be  executed.  This file is usually kept in the
       user's home directory with a name like .xmodmaprc.

EXPRESSION GRAMMAR
       The xmodmap program reads a list of expressions and parses
       them  all  before attempting to execute any of them.  This
       makes it possible to refer to keysyms that are being rede-
       fined  in  a  natural  way without having to worry as much
       about name conflicts.

       keycode NUMBER = KEYSYMNAME ...
               The list of keysyms is assigned to  the  indicated
               keycode (which may be specified in decimal, hex or
               octal and can be determined  by  running  the  xev
               program in the examples directory).

       keysym KEYSYMNAME = KEYSYMNAME ...
               The KEYSYMNAME on the left hand side is translated
               into matching keycodes used to perform the  corre-
               sponding  set of keycode expressions.  The list of
               keysym names may  be  found  in  the  header  file
               <X11/keysymdef.h>  (without the XK prefix) or the
               keysym database /usr/lib/X11/XKeysymDB.  Note that
               if  the same keysym is bound to multiple keys, the
               expression is executed for each matching  keycode.

       clear MODIFIERNAME
               This  removes  all entries in the modifier map for
               the given modifier, where valid name  are:  Shift,
               Lock,  Control,  Mod1,  Mod2, Mod3, Mod4, and Mod5
               (case does not matter in modifier names,  although
               it does matter for all other names).  For example,
               ``clear Lock'' will remove all any keys that  were
               bound to the shift lock modifier.

       add MODIFIERNAME = KEYSYMNAME ...
               This adds all keys containing the given keysyms to
               the indicated modifier map.  The keysym names  are
               evaluated  after all input expressions are read to
               make it easy to write  expressions  to  swap  keys
               (see the EXAMPLES section).




X Version 11                Release 5                           2




XMODMAP(1)                                             XMODMAP(1)


       remove MODIFIERNAME = KEYSYMNAME ...
               This removes all keys containing the given keysyms
               from the indicated modifier map.  Unlike add,  the
               keysym names are evaluated as the line is read in.
               This allows you to remove  keys  from  a  modifier
               without  having to worry about whether or not they
               have been reassigned.

       pointer = default
               This sets the pointer map back to its default set-
               tings  (button  1  generates a code of 1, button 2
               generates a 2, etc.).

       pointer = NUMBER ...
               This sets to pointer map to contain the  indicated
               button  codes.   The  list  always starts with the
               first physical button.

       Lines that begin with an exclamation point (!)  are  taken
       as comments.

       If  you  want to change the binding of a modifier key, you
       must also remove it from the appropriate modifier map.

EXAMPLES
       Many pointers are designed such that the first  button  is
       pressed  using the index finger of the right hand.  People
       who are left-handed frequently find that it is  more  com-
       fortable to reverse the button codes that get generated so
       that the primary button is pressed using the index  finger
       of  the  left  hand.   This  could  be  done on a 3 button
       pointer as follows:

            %  xmodmap -e "pointer = 3 2 1"


       Many editor applications support the notion of  Meta  keys
       (similar  to  Control  keys  except that Meta is held down
       instead of Control).  However, some servers do not have  a
       Meta  keysym  in the default keymap table, so one needs to
       be added by hand.  The following command will attach  Meta
       to the Multi-language key (sometimes labeled Compose Char-
       acter).  It also takes advantage of the fact that applica-
       tions  that need a Meta key simply need to get the keycode
       and don't require the keysym to be in the first column  of
       the  keymap  table.  This means that applications that are
       looking for a Multi_key (including  the  default  modifier
       map) won't notice any change.

            %  xmodmap -e "keysym Multi_key = Multi_key Meta_L"


       One of the more simple, yet convenient, uses of xmodmap is
       to  set  the  keyboard's  "rubout"  key  to  generate   an



X Version 11                Release 5                           3




XMODMAP(1)                                             XMODMAP(1)


       alternate  keysym.   This  frequently  involves exchanging
       Backspace with Delete to be more comfortable to the  user.
       If the ttyModes resource in xterm is set as well, all ter-
       minal emulator windows will use the same key  for  erasing
       characters:

            %  xmodmap -e "keysym BackSpace = Delete"
            %  echo "XTerm*ttyModes:  erase ^?" | xrdb -merge


       Some keyboards do not automatically generate less than and
       greater than characters when the comma and period keys are
       shifted.   This  can be remedied with xmodmap by resetting
       the bindings for the comma and period with  the  following
       scripts:

            !
            ! make shift-, be < and shift-. be >
            !
            keysym comma = comma less
            keysym period = period greater


       One  of  the more irritating differences between keyboards
       is the location of the Control and  Shift  Lock  keys.   A
       common  use  of  xmodmap is to swap these two keys as fol-
       lows:

            !
            ! Swap Caps_Lock and Control_L
            !
            remove Lock = Caps_Lock
            remove Control = Control_L
            keysym Control_L = Caps_Lock
            keysym Caps_Lock = Control_L
            add Lock = Caps_Lock
            add Control = Control_L


       The keycode command  is  useful  for  assigning  the  same
       keysym to multiple keycodes.  Although unportable, it also
       makes it possible to write scripts that can reset the key-
       board  to  a  known  state.  The following script sets the
       backspace key to generate Delete (as shown above), flushes
       all existing caps lock bindings, makes the CapsLock key be
       a  control  key,  make  F5  generate  Escape,  and   makes
       Break/Reset be a shift lock.

            !
            ! On the HP, the following keycodes have key caps as listed:
            !
            !     101  Backspace
            !      55  Caps
            !      14  Ctrl



X Version 11                Release 5                           4




XMODMAP(1)                                             XMODMAP(1)


            !      15  Break/Reset
            !      86  Stop
            !      89  F5
            !
            keycode 101 = Delete
            keycode 55 = Control_R
            clear Lock
            add Control = Control_R
            keycode 89 = Escape
            keycode 15 = Caps_Lock
            add Lock = Caps_Lock


ENVIRONMENT
       DISPLAY to get default host and display number.

SEE ALSO
       X(1), xev(1), Xlib documentation on key and pointer events

BUGS
       Every time a keycode expression is evaluated,  the  server
       generates a MappingNotify event on every client.  This can
       cause some  thrashing.   All  of  the  changes  should  be
       batched  together  and done at once.  Clients that receive
       keyboard input and ignore MappingNotify  events  will  not
       notice any changes made to keyboard mappings.

       Xmodmap  should  generate  "add"  and "remove" expressions
       automatically whenever a keycode that is already bound  to
       a modifier is changed.

       There should be a way to have the remove expression accept
       keycodes as well as  keysyms  for  those  times  when  you
       really mess up your mappings.

COPYRIGHT
       Copyright  1988,  1989,  1990  Massachusetts  Institute of
       Technology.
       Copyright 1987 Sun Microsystems, Inc.
       See X(1) for a full statement of rights and permissions.

AUTHOR
       Jim Fulton, MIT X Consortium, rewritten  from  an  earlier
       version by David Rosenthal of Sun Microsystems.













X Version 11                Release 5                           5


Typewritten Software • bear@typewritten.org • Edmonds, WA 98026