
Ich versuche, xmonad dazu zu bringen, eine gängige Zeichenfolge einzugeben, wenn ich eine einfache Tastenkombination drücke. Ein Beispiel für dieses Problem ist das einfache Eintippen meiner E-Mail-Adresse.
So sieht die Konfigurationsdatei für xmonad bei mir aus:
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
Wenn ich jedoch die Menütaste drücke (sie befindet sich unten rechts auf meiner Tastatur), erhalte ich nur die letzte Hälfte oder so. Wie: [email protected]
oder [email protected]
. Es ist völlig unvorhersehbar, wo der Druck beginnt.
Ich habe eine Problemumgehung gefunden, indem ich den xdotool
Befehl in geändert habe . Das scheint einwandfrei zu funktionieren, aber ich habe keine Ahnung, warum. Irgendwelche Ideen?xdotool sleep 0.1 type [email protected]
verwende xmonad 0.11 und xdotool Version 3.20140217.1
Antwort1
Die --sync
Option war genau das, wonach ich gesucht habe!
Allerdings ist diese --sync
Option nur für einen bestimmten Satz von Get- oder Suchbefehlen verfügbar.
Die Lösung war:xdotool getwindowfocus windowfocus --sync type [email protected]
Was hier passiert, ist, dass wir zuerst das fokussierte Fenster erhalten, über getwindowfocus
( getactivewindow
ist eine Alternative, wenn das andere nicht funktioniert).
Wir machen lediglich einen Unterschied: Wir holen uns das aktive Fenster und setzen es auf dasselbe. Der Hauptunterschied ist das Vorhandensein der --sync
Option, die xdotool
zum Warten zwingt, bis der vorherige Befehl angewendet wurde.
So garantieren wir, dass wir auf ein bestimmtes Fenster fokussiert sind und Befehle eingeben können.
Antwort2
Möglicherweise müssen Sie die Verzögerung zwischen den Tastenanschlägen folgendermaßen verlängern --delay
(Standard ist 12 ms):
xdotool type --delay 100 [email protected]