Vim отключает ibus IME & mdash; это ошибка?

Я использую 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: нет сфокусированного входного контекста

Это происходит при следующих условиях:

  1. Я вхожу в режим вставки
  2. Я вставляю некоторый японский текст
  3. Я выхожу из режима вставки

Если я не введу японский текст через IME, то исключение не возникает.

Я также заметил, что если я выйду из режима вставки после ввода текста на японском языке, когда IME все еще включен, то ввод IME отключен (я вижу изменение значка на панели задач). Если я выйду из режима вставки без ввода текста на японском языке, но пока IME все еще включен, IME остается включенным (значок не меняется). Похоже, что GVim отключает IME (или IME отключается) в некоторых условиях. Может ли это быть связано с исключением?

РЕДАКТИРОВАТЬ Я заметил, что это не происходит с командной строкой Vim, только с GVim. IME все еще отключен, но вышеприведенное исключение не выдается.

Мои вопросы:

  1. Это ошибка? Если это так, то чья это ошибка? Vim, Ibus или что-то еще?
  2. Есть ли способы обойти исключение?

РЕДАКТИРОВАТЬ

Моя системная информация:

> 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. [+1121]

5
задан 2 November 2012 в 12:53

1 ответ

Это, кажется, в основном ожидаемое поведение. Когда ibus активен и один, скажем, переходит в меню или выходит из режима ввода, ibus переключается на метод ввода, отключенный, поскольку он больше не видит элемент графического интерфейса с фокусом и там, где ввод текста возможен. Сообщение об ошибке («не сфокусированный входной контекст») соответствует этому. Ibus остается включенным, когда вы возвращаетесь в текстовое окно, не выполнив команду, потому что контекст ibus все еще жив. Ошибка в том, что контекст ibus уничтожается, когда вы выполняете действие и выполняете его щелчком в текстовом окне. Вы все еще в режиме вставки, но контекст ibus мертв, вам нужно снова включить ibus. Это не происходит в таких программах, как LibreOffice.

Я предполагаю, что ошибка связана с тем, что vim использует специальный режим вставки, а не стандартную модель событий графического интерфейса. Щелчок в текстовом окне обычно устанавливает фокус на текстовой области, но здесь это не так. Чтобы это работало, нам нужен дополнительный модуль, например ibus-el для emacs. Я не уверен, где вы должны подать ошибку для этого.

Для временного решения, я думаю, лучше всего установить ярлык для включения ibus в настройках ibus. Из меню ibus> настройки> вкладка «Общие»> включить окно. Хорошим кажется Ctrl-p, поскольку он находится рядом с i для включения режима ввода и [вы можете использовать для выхода из режима ввода. Я держу тебя пальцами в той же области. Когда вы вернетесь в текстовую область, быстрое движение пальцами намного проще, чем переместить мышь вверх и дважды щелкнуть мышью.

0
ответ дан 2 November 2012 в 12:53

Другие вопросы по тегам:

Похожие вопросы: