iBusがクソになった理由

Xubuntu を 13.10 へアップデートしたら日本語入力(iBus)がクソになったのでその理由を調べてみました。

Xubuntu を 13.10 へアップデートしたら日本語入力(iBus)がクソ(1.5)になりました。どんなにクソかは iBus 1.5がクソすぎる に譲るとして、私はどうしてそうなったのか (あわよくばどうすれば直るのか) を真夜中に調べてましたのでその成果を記しておこうと思います。

私の場合 Vim でIMEを制御 できないことで問題が根深いことを知りました。調べてみると InputContext というクラスから is_enabled(), enable(), disable() の3つのメソッドが消えていました。これらのメソッドは端的に言うと日本語の状態を取得、有効化、無効化するものです。うんもうIME制御なんてできません。ちなみに その修正が行われたのは約2年前 でした。

このようにクラスからメソッドが失われるというのは一般的にはタダ事ではありません。背後に大きな目的があるはずです。となれば俄然その目的に興味が湧いてきます。上記の修正を頼りに iBus の Issue を検索してみますとそれっぽいのが有りましたよ!

Were “enabled”/”disabled” signals and enable()/disable() methods accidentally removed?

This is the expected result. IBus won’t have the disabled mode. IBus switches xkb engines and input methods instead: https://live.gnome.org/GnomeShell/Design/Guidelines/SystemStatus/InputLanguage I think this way is similar with the current Mac OS and the Chrome OS.

ざっくり翻訳するとこうですかね。

IBus はもう disable とかしねーから。 単に Engine を切り替えるだけだよ。 OS X みたいにな!

ははーん。そういうことなのね。OS X を使ったことがある人ならばわかると思います。

Windows なら IME には MS IME や ATOK を使って、そのIMEの入力モードを直接入力モードや漢字変換モードに切り替えて入力します。ところが OS X だと「ことえり」「英数(直接入力)」を切り替えて入力するんですね。Chromeもそんな感じ。目指しているのはどうもあれです。

もうちょっと本質的に説明するとこうなります。IMEの種類(iBus 用語でいうところの Engine)を固定してそのIMEの状態をキーボードで切り替える Windows やそれまでの X11 で取られていた方法とは異なり、IMEの状態は固定してIME自体をキーボードで切り替えるOS X的な振る舞いに変更したとのこと。図にするとこう。

OS IMEの種類 IMEの状態
Windows 通常は切り替えない キーボードで切り替え
OS X キーボードで切り替え 通常は切り替えない

これに加えて iBus 1.5 ではアプリ毎にIMEの状態を管理するのではなく、全体でIMEの状態を共有するようにもなっています。これも OS X からのパクりと言ってよいでしょう。いや逆にこれをやりたいために、IMEの状態なんかみないで種類を切り替えちゃえば良いじゃん的な発想にもなったのでしょう。

いかんせん使いにくいことに変わりはありません。

私の対応

全体で1つのIMEの状態を共有するってのはどうにも我慢なりません。ということで uim へ切り替えることにしました。

$ sudo apt-get install uim uim-mozc

詳しくは説明しませんがあとは「言語サポート」から標準の入力方法を切り替えて uim 自体のセットアップをすれば終わりって感じです。タスクバーに表示されるアイコンはヒドイ状態ですが、まぁ許容範囲くらいには収まりました。

で肝心のVimのほうはというと uim-ctlso を使ってちゃんと制御できています。