Hatena::ブログ(Diary)

こくう このページをアンテナに追加 RSSフィード

2011-07-05

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

20:48 |  [Linux][tips] iBusでIMのOn/Offを個別制御を含むブックマーク  [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()

hito_asahito_asa 2011/09/02 15:18 参考になりました。
IME無効にするとこ、InsertEnterじゃなくてInsertLeaveですよね。

fuenorfuenor 2011/09/02 19:10 うわ、これはひどいミスですね。修正しました。
ありがとうございます。