web-dev-qa-db-fra.com

Vim désactive ibus IME - est-ce un bug?

J'utilise ibus IME pour saisir du texte japonais dans GVim. J'ai le script Vim suivant que je source au démarrage de 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

La ligne qui construit InputContext déclenche l'exception:

dbus.exception.DBusException: org.freedesktop.DBus.Error.Failed: pas de contexte d'entrée ciblé

Cela se produit dans les conditions suivantes:

  1. J'entre en mode insertion
  2. J'insère du texte japonais
  3. Je quitte le mode insertion

Si je n'entre aucun texte japonais via l'IME, alors l'exception n'est pas levée.

J'ai également remarqué que si je quitte le mode insertion après avoir entré du texte japonais alors que l'IME est toujours activé, l'entrée IME est désactivée (je peux voir l'icône changer dans la barre des tâches). Si je quitte le mode d'insertion sans saisir de texte japonais, mais que l'IME est toujours activé, l'IME reste activé (l'icône ne change pas). Il semble que GVim désactive l'IME (ou que l'IME s'éteigne) dans certaines conditions. Pourrait-il être lié à l'exception?

EDIT J'ai remarqué que cela ne se produit pas avec la ligne de commande Vim, seulement GVim. L'IME est toujours désactivé, mais l'exception ci-dessus n'est pas levée.

Mes questions sont:

  1. Est-ce un bug? Si c'est le cas, à qui appartient-il? Vim, Ibus ou autre chose?
  2. Existe-t-il des moyens de contourner l'exception?

MODIFIER

Mes informations système:

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

MODIFIER

Comportement confirmé sur Unity également.

5
mpenkov

Cela semble être principalement un comportement attendu. Lorsque ibus est actif et que l'on passe, par exemple, au menu ou quitte le mode de saisie, ibus passe à la méthode de saisie désactivée car il ne voit plus d'élément graphique avec focus et où la saisie de texte est possible. Le message d'erreur que vous avez vu ("pas de contexte d'entrée focalisé") est cohérent avec cela. Ibus reste allumé lorsque vous revenez à la fenêtre de texte sans avoir exécuté de commande car le contexte ibus est toujours vivant. Le bogue est que le contexte ibus est tué lorsque vous effectuez une action et suivez cela avec un clic dans la fenêtre de texte. Vous êtes toujours en mode insertion, mais le contexte ibus est mort, vous devez réactiver ibus. Cela ne se produit pas dans des programmes comme LibreOffice.

J'imagine que le bug vient de la façon dont vim utilise un mode d'insertion spécial plutôt qu'un modèle d'événement gui standard. Cliquer dans une fenêtre de texte placerait normalement le focus sur la zone de texte, mais ici ce n'est pas le cas. Pour le faire fonctionner, nous avons besoin d'un module complémentaire comme ibus-el pour emacs. Je ne sais pas où vous devez déposer un bogue pour cela.

Pour contourner le problème, je pense que la meilleure chose à faire est de définir un raccourci pour activer ibus dans les préférences ibus. Dans le menu ibus> préférences> onglet Général> case d'activation. Un bon semble être Ctrl-p car il est juste à côté du i pour activer le mode d'entrée et du [que vous utilisez peut-être pour quitter le mode d'entrée. Je vous garde les doigts dans la même zone. Lorsque vous êtes de retour dans la zone de texte, un coup rapide avec vos doigts est beaucoup plus facile que de déplacer la souris vers le haut et de cliquer deux fois.

2
chaskes