
Estou tentando fazer com que o xmonad digite uma sequência comum de caracteres sempre que pressiono uma combinação simples de teclas. Um exemplo desse problema é simplesmente digitar meu endereço de e-mail.
Esta é a aparência do arquivo de configuração do xmonad 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 a tecla de menu (está no canto inferior direito do teclado), recebo apenas a última metade. Como: [email protected]
ou [email protected]
. É totalmente imprevisível onde a impressão começará.
Encontrei uma solução alternativa alterando o xdotool
comando para . Isso parece funcionar sem falhar, mas não tenho ideia do porquê. Alguma ideia?xdotool sleep 0.1 type [email protected]
usando xmonad 0.11 e xdotool versão 3.20140217.1
Responder1
A --sync
opção era exatamente o que eu procurava!
No entanto, a --sync
opção existe apenas em um conjunto específico de comandos get ou search.
A solução acabou sendo:xdotool getwindowfocus windowfocus --sync type [email protected]
O que está acontecendo aqui é que primeiro pegamos a janela que está em foco, via getwindowfocus
( getactivewindow
é uma alternativa caso a outra não funcione).
Tudo o que estamos fazendo de diferente é obter a janela ativa e configurá-la para a mesma coisa. A principal diferença é a presença da --sync
opção que obriga xdotool
a esperar até que o comando anterior seja aplicado.
Assim garantimos que estaremos focados em uma janela específica e poderemos digitar comandos.
Responder2
Pode ser necessário aumentar o atraso entre as teclas digitadas usando --delay
(o padrão é 12ms):
xdotool type --delay 100 [email protected]