web-dev-qa-db-fra.com

Commande de type xdotool mangeant des caractères

J'essaie de faire en sorte que xmonad tape une séquence de caractères commune chaque fois que je frappe une simple combinaison de touches. Un exemple de ce problème est simplement en tapant mon adresse email.

Voici à quoi ressemble le fichier de configuration de xmonad pour moi:

import XMonad
import XMonad.Config.Gnome (gnomeConfig)
import XMonad.Util.CustomKeys (customKeys)
import XMonad.Util.EZConfig

main = xmonad $ gnomeConfig {
  keys = customKeys delKeys insKeys,
  logHook = return ()
  }
  where
    -- Remap mod-p to dmenu and mod-[sd] to swapping xinerama screens.
    delKeys :: XConfig l -> [(KeyMask, KeySym)]
    delKeys XConfig { modMask = modMask } =
      [ (modMask, xK_p), (modMask, xK_w), (modMask, xK_e) ]

    insertEmailAddress :: KeyMask -> [((KeyMask, KeySym), X())]
    insertEmailAddress modMask = [ ((noModMask, xK_Menu), spawn "xdotool type [email protected]") ]

    insKeys :: XConfig l -> [((KeyMask, KeySym), X())]
    insKeys XConfig { modMask = modMask } = insertEmailAddress modMask

Cependant, lorsque je tape sur la touche de menu (en bas à droite de mon clavier), je n’obtiens que la moitié environ. Comme: [email protected] ou [email protected]. Il est totalement imprévisible où l’impression commencera.

J'ai trouvé une solution de contournement en remplaçant la commande xdotool par xdotool sleep 0.1 type [email protected]. Cela semble fonctionner sans faute mais je ne sais pas pourquoi. Des pensées?

en utilisant xmonad 0.11 & xdotool version 3.20140217.1

3
wafflecat

L'option --sync était exactement ce que je cherchais!

Cependant, l'option --sync n'existe que sur un ensemble particulier de commandes get ou search.

La solution s'est avérée être: xdotool getwindowfocus windowfocus --sync type [email protected]

Ce qui se passe ici, c’est que nous obtenons d’abord la fenêtre qui est focalisée, via getwindowfocus (getactivewindow est une alternative si l’autre ne fonctionne pas).

Tout ce que nous faisons différemment est d’obtenir la fenêtre active et de la régler de la même manière. La principale différence est la présence de l'option --sync qui oblige xdotool à attendre que la commande précédente ait été appliquée.

Nous garantissons donc que nous sommes concentrés sur une fenêtre particulière et que nous pourrons taper des commandes.

3
wafflecat

Vous devrez peut-être augmenter le délai entre les frappes en utilisant --delay (la valeur par défaut est 12 ms):

xdotool type --delay 100 [email protected]
1
Sylvain Pineau