web-dev-qa-db-ja.com

Vimはibus IMEを無効にします-これはバグですか?

Ibus IMEを使用してGVimに日本語のテキストを入力しています。 GVimの起動時にソースとなる次のVimスクリプトがあります。

autocmd InsertLeave * :call bug#onInsertLeave()
function! bug#onInsertLeave()
  python << EOT
import vim
import ibus
bus = ibus.Bus()
ic = ibus.InputContext(bus, bus.current_input_contxt())
ic.disable()
print "bug#onInsertLeave(): exiting"
EOT
endfunction

InputContextを構築する行は例外を発生させます:

dbus.exception.DBusException:org.freedesktop.DBus.Error.Failed:フォーカスされた入力コンテキストなし

これは、次の条件下で発生します。

  1. 挿入モードに入る
  2. 日本語のテキストを挿入します
  3. 挿入モードを終了します

IMEで日本語のテキストを入力しない場合、例外は発生しません。

また、IMEが有効な状態で日本語のテキストを入力した後に挿入モードを終了すると、IME入力が無効になることに気付きました(タスクバーでアイコンの変更を確認できます)。日本語テキストを入力せずに挿入モードを終了しても、IMEがまだ有効な場合、IMEは有効なままです(アイコンは変わりません)。 GVimがいくつかの条件でIMEを無効にしている(またはIMEがオフになっている)ようです。それは例外に関係しているのでしょうか?

[〜#〜] edit [〜#〜]これはコマンドラインVimでは発生せず、GVimのみで発生することに気付きました。 IMEはまだ無効になっていますが、上記の例外はスローされません。

私の質問は:

  1. これはバグですか?もしそうなら、誰のバグですか? Vim、Ibus、または他の何か?
  2. 例外を回避する方法はありますか?

[〜#〜] edit [〜#〜]

私のシステム情報:

> misha@misha-lmd:~/git/iwait2013/lagos$ apt-cache policy ibus ibus:  
> Installed: 1.4.1-3ubuntu1   Candidate: 1.4.1-3ubuntu1   Version table:
> *** 1.4.1-3ubuntu1 0
>         500 http://jp.archive.ubuntu.com/ubuntu/ precise/main AMD64 Packages
>         100 /var/lib/dpkg/status misha@misha-lmd:~/git/iwait2013/lagos$ apt-cache policy vim vim:  
> Installed: 2:7.3.429-2ubuntu2.1   Candidate: 2:7.3.429-2ubuntu2.1  
> Version table:  *** 2:7.3.429-2ubuntu2.1 0
>         500 http://jp.archive.ubuntu.com/ubuntu/ precise-updates/main AMD64 Packages
>         100 /var/lib/dpkg/status
>      2:7.3.429-2ubuntu2 0
>         500 http://jp.archive.ubuntu.com/ubuntu/ precise/main AMD64 Packages

Ubuntu 12.04、Fluxbox。

[〜#〜] edit [〜#〜]

Unityでも確認された動作。

5
mpenkov

これは主に予想される動作のようです。 ibusがアクティブで、たとえばメニューに移動するか、入力モードを終了すると、ibusはフォーカスのあるgui要素が表示されなくなり、テキストの入力が可能になるため、入力メソッドをオフに切り替えます。表示されたエラーメッセージ(「フォーカスのない入力コンテキスト」)はこれと一致しています。 ibusコンテキストはまだ生きているため、コマンドを実行せずにテキストウィンドウに戻ると、Ibusはオンのままです。バグは、アクションを実行し、それに続いてテキストウィンドウでクリックすると、ibusコンテキストが強制終了されることです。挿入モードのままですが、ibusコンテキストが無効になっているため、ibusを再度オンにする必要があります。これは、LibreOfficeのようなプログラムでは発生しません。

このバグは、vimが標準のguiイベントモデルではなく特別な挿入モードを使用する方法に起因していると思います。通常、テキストウィンドウをクリックすると、テキスト領域にフォーカスが設定されますが、ここでは設定しません。動作させるには、emacs用のibus-elのようなアドオンが必要です。このバグをどこに報告すればよいかわかりません。

回避策として、ibusの設定でibusを有効にするショートカットを設定することをお勧めします。 ibusメニュー> [設定]> [全般]タブ> [有効化]ボックスから。これは、入力モードを有効にするためのiのすぐ隣にあり、[入力モードを終了するために使用している可能性があるため、Ctrl-pのように思えます。同じエリアに指を置いています。テキスト領域に戻ったら、マウスを上に移動して2回クリックするよりも、指ですばやくフリックする方がはるかに簡単です。

2
chaskes