O Vim desabilita o ibus IME - isso é um bug?

5

Estou usando o ibus IME para inserir texto em japonês no GVim. Eu tenho o seguinte script Vim que eu forneço quando o GVim é iniciado:

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

A linha que constrói o InputContext levanta a exceção:

dbus.exception.DBusException: org.freedesktop.DBus.Error.Failed: no focused input context

Isso acontece nas seguintes condições:

  1. eu entro no modo de inserção
  2. eu insiro um texto em japonês
  3. eu saio do modo de inserção

Se eu não inserir nenhum texto em japonês por meio do IME, a exceção não será gerada.

Também notei que, se eu sair do modo de inserção depois de inserir algum texto em japonês enquanto o IME ainda estiver ativado, a entrada do IME será desativada (consigo ver a alteração do ícone na barra de tarefas). Se eu sair do modo de inserção sem inserir nenhum texto em japonês, mas enquanto o IME ainda estiver ativado, o IME permanecerá ativado (o ícone não será alterado). Parece que o GVim está desabilitando o IME (ou o IME está desligando) em algumas condições. Poderia estar relacionado com a exceção?

EDIT Eu notei que isso não acontece com a linha de comando Vim, apenas o GVim. O IME ainda está desativado, mas a exceção acima não é lançada.

Minhas perguntas são:

  1. Isso é um bug? Se é, então de quem é o erro? Vim, Ibus ou algo mais?
  2. Existem maneiras de contornar a exceção?

EDITAR

As informações do meu sistema:

> 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.

EDITAR

Comportamento confirmado no Unity também.

    
por mpenkov 01.11.2012 / 15:58

1 resposta

2

Este parece ser o comportamento mais esperado. Quando o ibus está ativo e um, digamos, se move para o menu ou sai do modo de entrada, o ibus muda para o método de entrada, já que ele não vê mais um elemento gui com foco e onde é possível inserir texto. A mensagem de erro que você viu ("nenhum contexto de entrada focalizado") é consistente com isso. Ibus permanece ligado quando você volta para a janela de texto sem ter executado um comando porque o contexto do ibus ainda está ativo. O erro é que o contexto do ibus é eliminado quando você executa uma ação e segue isso com um clique na janela de texto. Você ainda está no modo de inserção, mas o contexto do ibus está morto, você precisa ativar o ibus novamente. Isso não acontece em programas como o LibreOffice.

Eu imagino que o bug vem do modo como o vim usa um modo de inserção especial em vez de um modelo padrão de evento gui. Clicar em uma janela de texto normalmente definiria o foco na área de texto, mas aqui não. Para fazê-lo funcionar, precisamos de um add-on como o ibus-el para o emacs. Não tenho certeza de onde você deve enviar um bug para isso.

Para um trabalho em volta, acho que a melhor coisa a fazer é definir um atalho para ativar o ibus nas preferências do ibus. Do menu ibus > preferências > Separador Geral > habilitar caixa. Um bom parece ser Ctrl-p, uma vez que está ao lado do i para habilitar o modo de entrada e o [você pode estar usando para sair do modo de entrada. Eu mantenho seus dedos na mesma área. Quando você está de volta à área de texto, um movimento rápido com os dedos é muito mais fácil do que mover o mouse para cima e clicar duas vezes.

    
por chaskes 01.01.2013 / 01:11

Tags