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