xmodmap はクライアントのアプリケーション上で、イベントのキーコードをキー シムへ変換する時に使われるキーボード modifier マップと keymap テーブルを、表示したり編集する時に使われる。通常これはユーザセッション の起動スクリプトから、キーボードをユーザが自分の好みのキー配列にする時 に実行される。
以下のオプションが xmodmap では使われる。
filename は実行される xmodmap の表現が記述されたファイルを指定する。このファイルは通常はユーザのホー ムディレクトリに .xmodmaprc の名前で保存される。
xmodmap プログラムは表現のリストを実行する前にそれらの表現を一旦全て読み込んで 解析を行う。このことにより普通の方法では再定義されてしまうキーシム名を、 名前の衝突についてはそれほど気にかけることなく参照することが可能である。
エクスクラメーションマーク(!)から始まる行はコメント行として扱われる。
もし、modifer キーのバインディングを変更したい時は、適当な modifer マッ プからその modifier キーの消去もしなければいけない。
多くのポインタは第1ボタンを右手の人差し指を使って押すように設計され ている。左利きの人は時に、良く使うボタンを左手の人差し指で押せるように、 ボタンに割り当てられているボタンコードの順序をひっくり返すとより使い心 地が良くなるということに気づく。このことは 3 ボタンポインタでは次のよ うにすればたぶん出来るだろう。
% xmodmap -e "pointer = 3 2 1"
多くのアプリケーションはメタキー(コントロールの代わりにメタが押される 場合を除くと、コントロールキーと似ている)の概念をサポートしている。し かしながら幾つかのサーバはデフォルトのキーマップテーブルにメタキーのキー シムを持っていないので、手で追加する必要がある。 以下のコマンドはメタキーに多国語キー(時には組版文字が印字されている) の機能を付加する。メタキーを必要とするアプリケーションはキーコー ドのみを必要とし、キーマップテーブルの第 1 カラムに記述されているキーシ ムは必要としないという事実も利用する。これは Multi_key (デフォルトの modifier マップを含む)を探しているアプリケーションがキーシムのいかなる 置き換えに対しても気が付かないであろうということを意味する。
% xmodmap -e "keysym Multi_key = Multi_key Meta_L"
同様に、あるキーボードはメタキーを持たないかわりに ALT キーを持っている。 この場合には以下のコマンドが便利である。
% xmodmap -e "keysym Alt_L = Meta_L Alt_L"
最も単純で、それでいて便利な xmodmap の利用法の一つはキーボードの "抹消" キーをもう一つのキーシムで代替するこ とである。このことはユーザにとってより快適になる、BS キーを DELETE キー と入れ換えるということも含んでいる。さらに、もし xterm での ttyModes リソースが設定されている場合には、全てのターミナルエミュレータのウィン ドウは同じキーを使って文字を消去する。
% xmodmap -e "keysym BackSpace = Delete" % echo "XTerm*ttyModes: erase ^?" | xrdb -merge
幾つかのキーボードは「コンマ + shift」と「ピリオド + shift」に対して自動 的に「<」と「>」を与えない。これはコンマとピリオドのキーバインディン グを以下のスクリプトによってリセットすることにより xmodmap で矯正することができる。
! ! make shift-, be < and shift-. be > ! keysym comma = comma less keysym period = period greater
キーボードの違いで、より苛立たせられることの一つはコントロールキーとシ フトロックキーの位置である。 xmodmap のありふれた使い方はこれら 2 つのキーを以下のコマンドで入れ換えること である。
! ! Caps_Lock と 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
keycode コマンドは複数のキーコードに同じキーシムを指定する際便利である。 移植性はよくないものの、キーボードを、ある知られた状態にリセットするス クリプトを書くことができる。以下のスクリプトは BS キーに Delete の機能を 持たせ(上記を参照)、今ある caps lock のバインディングを全て消去し、 Capslock キーを Control キーに換え、F5 キーに Escape の機能を持たせ、 Break/Reset を shift lock にする。
! ! HP では以下の keycode は下記に挙げる key cap を持つ: ! ! 101 Backspace ! 55 Caps ! 14 Ctrl ! 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
keycode 表現が評価されるたびにサーバは各々のクライアントに対して MappingNotify イベントを生成する。このことが幾らかの問題を起こす。全ての変換はまとめ てバッチ処理され、同時に実行されてしまう。キーボード入力を受取り、 MappingNotify イベントを無視するクライアントはキーボードマッピングに対してなされた如 何なる変化にも気が付かない。
ある modifier に規定されているキーコードが変更された場合は何時でも Xmodmap は "add" と "remove" 表現を自動的に生成してしまう。
表現はマッピングを台無しにしてしまった時のために キーシムと同様にキーコードも remove 表現が受け付けられるような方法を用意すべきである。