[Linux][tips] iBusでIMのOn/Offを個別制御

最近UbuntuクリーンインストールしたらIMのデフォルトがIBusになっていました。
IBusではIMのOn/Offを個別設定できないようなので「変換」キーと「無変換」キーでIMをON/OFFみたいなことができません。
とりあえずUbuntuにはデフォルトでPythonがインストールされているので、Pythonで制御してキーボードショートカットに割り付けることにしました。


PythonIBusのIMトグル

import ibus
bus = ibus.Bus()
ic  = ibus.InputContext(bus, bus.current_input_contxt())
if ic.is_enabled():
  ic.disable()
else:
  ic.enable()


このスクリプトibus-toggle.pyなど適当なファイルにして

$ python ibus-toggle.py

みたいに実行するとIMがトグルされるはずです


ここでハマったのがcurrent_input_contextではなくcurrent_input_contxtを使用するというところです。
これってtypoだろ! と思ったのですが、Changelogをみるともろにtypo修正という項目があるので互換性のためかなにかでこのままなのかもしれません。
それならそれでcurrent_input_contextもちゃんと定義しろよ、という気もしますが、自分がなにか勘違いしている可能性も高いですし、とりあえず動作したのでそこはそれ。
もしも動かなくなっていたらこの辺が怪しいということにして覚え書き。


ということでIMオンとIMオフも作成しました

PythonIBusのIMオン

import ibus
bus = ibus.Bus()
ic = ibus.InputContext(bus, bus.current_input_contxt())
ic.enable()

PythonIBusのIMオフ

import ibus
bus = ibus.Bus()
ic = ibus.InputContext(bus, bus.current_input_contxt())
ic.disable()