Comando de tipo de xdotool comiendo caracteres

Comando de tipo de xdotool comiendo caracteres

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 xdotoolcomando 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 --syncopción era exactamente lo que estaba buscando!

Sin embargo, la --syncopció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( getactivewindowes 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 --syncopción que obliga xdotoola 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]

información relacionada