X11.app上で日本語入力する設定覚書

X11上ではOSネイティブのIMが使えないので、UIMを設定するメモ。
何番煎じかわかりませんが、複雑さを思えばメモしたくなるのもわかっていただけると思います。

MacUIMをインストールする

http://sourceforge.jp/projects/macuim/
Anthyが入ります。(Anthyではなくてもいいけど)
OSネイティブのIMとしてもAnthyを使うようにすれば、辞書も各種設定も共有できます。

Xの起動時にuim-ximを起動させる。

Xでuimを使うためには、よくわかりませんがuim-ximというのを動かす必要があります。
起動スクリプトをxinitrc.dに入れておけばXの起動時に実行されます。

/usr/X11/lib/X11/xinit/xinitrc.d/20-uim.sh

IM=/Library/Frameworks/UIM.framework/Versions/Current/bin/uim-xim
[ -x $IM ] && $IM &

環境変数

uimを使うには、さらに環境変数も必要です。

export XMODIFIERS=@im=uim

これがenvironment.plistがなぜか効いてくれない。(;;
.bashrcに書いてもシェルの外には反映されない。(;;
X11.appのメニューから起動したやつを除けばクライアントのプロセスはXの子というわけではないので.xinitrcも効かない。 (;;
ので、例えばwineであればWineHelperの設定にするとかなんとかしてその都度反映させるようにします。

.Xmodmap

ここまでの設定でX上でUIMが使えるようになりましたが、ON/OFF方法がOSネイティブ時と異なっていて混乱します。それ以前にShift+Spaceとか狂ってる。
OSネイティブでは、かな/英数(KeyRemap4MacBookを使って左右Commandキー)でON/OFFしているとして、その設定をX上にも持ち込みます。
まず(KeyRemap4MacBookによってかな/英数のキーコードは送られていますので)~/.Xmodmapでそれを変換/無変換(かな/英数ではない)に結びつけます。

~/.Xmodmap

keycode 110 = Muhenkan
keycode 112 = Henkan_Mode

! command_L -> control_L
keycode 63 = Control_L
add control = Control_L

! command_R -> control_R
keycode 71 = Control_R
add control = Control_R

! option_L -> alt_L
keycode 66 = Alt_L Meta_L
add mod1 = Alt_L Meta_L

! option_R -> alt_L (alt_R causes error on VCL)
keycode 69 = Alt_L Meta_L
add mod1 = Alt_L Meta_L

110,112以外はwine用のおまけ。CommandキーはAlt扱いされてますが、Ctrlにしたほうが、操作が共通化されて良いです。Optionキーにはaltと刻印されていますのでこれをAltに。alt_Rは何故かVCLアプリケーションでアクセス違反を起こすので、両方alt_Lにしてます。原因不名。

変換/無変換でON/OFF

UIMの設定を変えて、変換/無変換でON/OFFするようにします。直接かな/英数を割り当てないのは、かな/英数は、OSネイティブのIMのON/OFF操作ですので、キーをそっちに奪われるからです。X上のUIMの状態とOSネイティブのIMの状態は一致しませんので、X上でかなキーを押してもXの外側でのIMの状態が切り替わるだけで、Xの中では変化がありません。

~/.uim.d/customs/custom-anthy-keys2.scm

(define anthy-on-key '("Henkan_Mode"))
(define anthy-on-key? (make-key-predicate '("Henkan_Mode")))
(define anthy-off-key '("Muhenkan"))
(define anthy-off-key? (make-key-predicate '("Muhenkan")))