Vim отключает ibus IME - это ошибка?
Я использую ibus IME для ввода японского текста в GVim. У меня есть следующий скрипт Vim, который я использую при запуске GVim:
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: нет целевого входного контекста
Это происходит при следующих условиях:
- Я вхожу в режим вставки
- Я вставляю японский текст
- Я выхожу из режима вставки
Если я не введу японский текст через IME, исключение не возникает.
Я также заметил, что если я выйду из режима вставки после ввода некоторого японского текста, когда IME все еще включен, то ввод IME отключен (я вижу изменение значка на панели задач). Если я выйду из режима вставки без ввода текста на японском языке, но пока IME все еще включен, IME остается включенным (значок не меняется). Похоже, что GVim отключает IME (или IME отключается) в некоторых условиях. Может ли это быть связано с исключением?
РЕДАКТИРОВАТЬ Я заметил, что это не происходит с командной строкой Vim, только GVim. IME по-прежнему отключен, но указанное выше исключение не выдается.
Мои вопросы:
- Это ошибка? Если это так, то чья это ошибка? Vim, Ibus или что-то еще?
- Есть ли способы обойти это исключение?
РЕДАКТИРОВАТЬ
Информация о моей системе:
> 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.
РЕДАКТИРОВАТЬ
Подтвержденное поведение на Unity также.
1 ответ
Похоже, это в основном ожидаемое поведение. Когда ibus активен и один, скажем, переходит в меню или выходит из режима ввода, ibus переключается на метод ввода, отключенный, поскольку он больше не видит элемент графического интерфейса с фокусом и там, где ввод текста возможен. Сообщение об ошибке ("не сфокусированный входной контекст") соответствует этому. Ibus остается включенным, когда вы возвращаетесь в текстовое окно, не выполнив команду, потому что контекст ibus все еще жив. Ошибка в том, что контекст ibus уничтожается, когда вы выполняете действие и выполняете его щелчком в текстовом окне. Вы все еще в режиме вставки, но контекст ibus мертв, вам нужно снова включить ibus. Это не происходит в таких программах, как LibreOffice.
Я предполагаю, что ошибка связана с тем, что vim использует специальный режим вставки, а не стандартную модель событий графического интерфейса. Щелчок в текстовом окне обычно устанавливает фокус на текстовой области, но здесь это не так. Чтобы это работало, нам нужен дополнительный модуль, например ibus-el для emacs. Я не уверен, где вы должны подать ошибку для этого.
Для временного решения, я думаю, лучше всего установить ярлык для включения ibus в настройках ibus. Из меню ibus> настройки> вкладка "Общие"> включить окно. Хорошим кажется Ctrl-p, поскольку он находится рядом с i для включения режима ввода и [вы можете использовать для выхода из режима ввода. Я держу тебя пальцами в той же области. Когда вы вернетесь в текстовую область, быстрое движение пальцами намного проще, чем перемещать мышь вверх и дважды щелкать мышью.