Posted at

変換/無変換キーをUS配列キーボードでも使いたい

JIS配列のキーボードにはあまり使わないキーがいっぱいあって、その代表格が変換キーと無変換キーです。

でも、スペースの両隣という最高の位置に普段使わないキーがあるのはとても便利で、

たとえばIMEのオンを変換キー、オフを無変換キーに割り当てるとプログラミングがとってもはかどります。

そんな背景で、僕はいつもJIS配列のキーボードをUS配列として認識させて使っています。

でも、わけあってUS配列キーボードを使わざるを得ない時、あの洗練されたキーボードには変換/無変換キーがありません。

そこで、無理やり変換/無変換キーを実現できるようにするのが本記事の目的です。


xdotool の導入

Linux にはキー入力やマウス操作をコマンドラインでシミュレートしてくれる xdotool コマンドがあります。

Windows とか Mac は知りません。なんか適当に同じようなやつを探してください。

xdotool で、無変換キーの押下をシミュレートするには

$ xdotool key 0xff22

変換キーの押下をシミュレートするには

$ xdotool key 0xff23

とします。


キーボードショートカットに登録

Ubuntu だったらキーボードショートカットを簡単に登録できます。

ここでは、US配列でもあまり使われないキーである「メニューキー」(右Altの隣りにあるやつ)を

$ xdotool key 0xff23

のショートカットとして登録すれば、メニューキーを押した時に無変換キーを押すことと同様の効果が得られるはずです。

しかし、これには落とし穴があって、「メニューキー」を押した瞬間に無変換キーの押下がシミュレートされてしまうので、実際には「メニューキーと無変換キーを同時に押した」と判断されてしまいます。

これを防ぐためにちょっとHackyですが

$ bash -c "sleep 0.5 && xdotool key 0xff23"

のように、スリープを挟んで「メニューキー」の押下が終わった頃に無変換キーの押下がシミュレートされるようにしましょう。

同じようにたとえば Shift + メニューキー というキーボードショートカットに

$ bash -c "sleep 0.5 && xdotool key 0xff22"

を割り当てておけば、変換キーの押下をシミュレートすることができます。