
Estoy intentando que xmonad escriba una secuencia común de caracteres cada vez que presiono una combinación de teclas simple. Un ejemplo de este problema es simplemente escribir mi dirección de correo electrónico.
Así es como se ve el archivo de configuración de xmonad para mí:
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
Sin embargo, cuando presiono la tecla de menú (está en la parte inferior derecha de mi teclado), solo obtengo la última mitad. Como: [email protected]
o [email protected]
. Es totalmente impredecible dónde comenzará la impresión.
Encontré una solución cambiando el xdotool
comando a . Esto parece funcionar sin falta, pero no tengo idea de por qué. ¿Alguna idea?xdotool sleep 0.1 type [email protected]
usando xmonad 0.11 y xdotool versión 3.20140217.1
Respuesta1
¡La --sync
opción era exactamente lo que estaba buscando!
Sin embargo, la --sync
opción sólo existe en un conjunto particular de comandos de obtención o búsqueda.
La solución resultó ser:xdotool getwindowfocus windowfocus --sync type [email protected]
Lo que sucede aquí es que primero obtenemos la ventana enfocada, vía getwindowfocus
( getactivewindow
es una alternativa si la otra no funciona).
Lo único que estamos haciendo de manera diferente es obtener la ventana activa y configurarla para lo mismo. La diferencia clave es la presencia de la --sync
opción que obliga xdotool
a esperar hasta que se haya aplicado el comando anterior.
Así garantizamos que estamos enfocados en una ventana en particular y podremos escribir comandos.
Respuesta2
Es posible que necesites aumentar el retraso entre pulsaciones de teclas usando --delay
(el valor predeterminado es 12 ms):
xdotool type --delay 100 [email protected]