#!/bin/sh # # Copyright 1995 by Jeff Bigler (jcb@mit.edu) # # Last modified: 2005/09/12 00:31:54 by Jeff Bigler (jcb@mit.edu) # # Permission granted to copy and redistribute this file. Please send # any improvements/changes you make to the author. # if [ -n "$KBD_MAPDIR" -a -r "$KBD_MAPDIR" ]; then mapdir=$KBD_MAPDIR # directory where keymaps live else mapdir='/mit/outland/lib/keymap' fi if [ -n "$KBD_DVORAK" -a -r "$KBD_MAPDIR/$KBD_DVORAK" ]; then dvorakfile=$KBD_DVORAK # filename for Dvorak keymap else dvorakfile='dvorak.ansi' fi if [ -n "$KBD_LEFT" -a -r "$KBD_MAPDIR/$KBD_LEFT" ]; then leftfile=$KBD_LEFT # filename for left-handed keymap else leftfile='left-keyboard' fi if [ -n "$KBD_RIGHT" -a -r "$KBD_MAPDIR/$KBD_RIGHT" ]; then rightfile=$KBD_RIGHT # filename for right-handed keymap else rightfile='right-keyboard' fi if [ -n "$KBD_SWAPCL" -a -r "$KBD_MAPDIR/$KBD_SWAPCL" ]; then swapclfile=$KBD_SWAPCL # filename for swapping ctrl and lock else swapclfile='swap-ctrl-lock' fi if [ -n "$KBD_BSDEL" -a -r "$KBD_MAPDIR/$KBD_BSDEL" ]; then bsdel=$KBD_BSDEL # filename for mapping Backspace to Delete else bsdelfile='swap-backspace-delete' fi if [ -n "$KBD_SAVEDIR" -a -r "$KBD_SAVEDIR" ]; then savedir=$KBD_SAVEDIR # directory for default mappings else savedir='/tmp' fi if [ -n "$KBD_SAVEFILE" ]; then savefile=$KBD_SAVEFILE # filename for default mappings else savefile='keymap.default' fi com=`basename $0` # save the name of the command arg=$1 # save the first argument (disregard others) usage_message="Usage: $com [--dvorak | --left | --right | --swapcl | --swapbd | --qwerty | --save | --reset | --help]" case "$arg" in --dvorak | -dvorak | -dk) # If we want Dvorak if [ -r $savedir/$savefile ]; then # if default file exists, echo "$savedir/$savefile exists. Resetting keyboard before remapping." xmodmap $savedir/$savefile # reset to default mappings /bin/rm $savedir/$savefile # remove default mappings file fi xmodmap -pke > $savedir/$savefile # save default mappings in /tmp xmodmap $mapdir/$dvorakfile # switch to Dvorak mappings echo "Type (or paste) $com --reset to reset the keyboard." ;; --left | -left | -lk) # If we want a left keyboard if [ -r $savedir/$savefile ]; then # if default file exists, echo "$savedir/$savefile exists. Resetting keyboard before remapping." xmodmap $savedir/$savefile # reset to default mappings /bin/rm $savedir/$savefile # remove default mappings file fi xmodmap -pke > $savedir/$savefile # save default mappings in /tmp xmodmap $mapdir/$leftfile # switch to left mappings echo "Type (or paste) $com --reset to reset the keyboard." ;; --right | -right | -rk) # If we want a right keyboard if [ -r $savedir/$savefile ]; then # if default file exists, echo "$savedir/$savefile exists. Resetting keyboard before remapping." xmodmap $savedir/$savefile # reset to default mappings /bin/rm $savedir/$savefile # remove default mappings file fi xmodmap -pke > $savedir/$savefile # save default mappings in /tmp xmodmap $mapdir/$rightfile # switch to right mappings echo "Type (or paste) $com --reset to reset the keyboard." ;; --swapcl | -swapcl | -scl) if [ ! -r $savedir/$savefile ]; then # save default mappings if xmodmap -pke > $savedir/$savefile # no save file exists fi echo "Swapping Caps Lock with left Ctrl key. Type" echo "$com --swapcl" echo "again to switch back." xmodmap $mapdir/$swapclfile ;; --swapbd | -swapbd | -bs2del | -sbd) if [ ! -r $savedir/$savefile ]; then # save default mappings if xmodmap -pke > $savedir/$savefile # no save file exists fi echo "Swapping BackSpace key with Delete key. Type" echo "$com --swapbd" echo "again to switch back." xmodmap $mapdir/$bsdelfile ;; --qwerty | -qwerty | -q) # If we want qwerty again if [ -r $savedir/$savefile ]; then # if default file exists, xmodmap $savedir/$savefile # reset to default mappings /bin/rm $savedir/$savefile # remove default mappings file else echo "Error: $savedir/$savefile not found." exit 1 fi ;; # Note: I've kept the "reset" option separate from the qwerty # option, to give the user the option of having a separate # qwerty keysym file, and still use "keymap --reset" to return # to the default keybindings. --save | -save | -s) # generate save file if [ ! -r $savedir/$savefile ]; then # if default file doesn't exist xmodmap -pke > $savedir/$savefile # save default mappings echo "Type (or paste) $com --reset to reset the keyboard." else echo "Error: $savedir/$savefile already exists." exit 1 fi ;; --reset | -reset | -r) # If we want the default if [ -r $savedir/$savefile ]; then # if default file exists, xmodmap $savedir/$savefile # reset to default mappings /bin/rm $savedir/$savefile # remove default mappings file else echo "Error: $savedir/$savefile not found." exit 1 fi ;; --help | -help | -h) echo "$usage_message" ;; *) echo "$usage_message" exit 1 ;; esac