xdotool's type comando comendo personagens

3

Estou tentando fazer com que o xmonad digite uma sequência comum de caracteres sempre que eu clico em uma combinação de teclas simples. Uma instância desse problema é simplesmente digitar meu endereço de e-mail.

Isto é o que o arquivo de configuração do xmonad parece para mim:

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

No entanto, quando pressiono minha tecla de menu (está no canto inferior direito do meu teclado), recebo apenas a última metade. Como: [email protected] ou [email protected] . É totalmente imprevisível onde a impressão será iniciada.

Encontrei uma solução alternativa alterando o comando xdotool para xdotool sleep 0.1 type [email protected] . Isso parece funcionar sem falhas, mas não tenho idéia do porquê. Alguma idéia?

usando o xmonad 0.11 & amp; versão xdotool 3.20140217.1

    
por wafflecat 16.07.2015 / 00:49

2 respostas

3

A opção --sync era exatamente o que eu procurava!

No entanto, a opção --sync existe apenas em um determinado conjunto de comandos get ou de pesquisa.

A solução acabou por ser: xdotool getwindowfocus windowfocus --sync type [email protected]

O que está acontecendo aqui é que primeiro obtemos a janela que está focada, via getwindowfocus ( getactivewindow é uma alternativa se a outra não funcionar).

Tudo o que estamos fazendo de maneira diferente é obter a janela ativa e configurá-la para a mesma coisa. A principal diferença é a presença da opção --sync , que força xdotool a esperar até que o comando anterior seja aplicado.

Assim, garantimos que estamos focados em uma determinada janela e poderemos digitar comandos.

    
por wafflecat 19.07.2015 / 23:33
1

Pode ser necessário aumentar o atraso entre as teclas digitadas usando --delay (o padrão é 12ms):

xdotool type --delay 100 [email protected]
    
por Sylvain Pineau 16.07.2015 / 01:15