Der Typbefehl von xdotool frisst Zeichen

Der Typbefehl von xdotool frisst Zeichen

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 xdotoolBefehl 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 --syncOption war genau das, wonach ich gesucht habe!

Allerdings ist diese --syncOption 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( getactivewindowist 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 --syncOption, die xdotoolzum 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]

verwandte Informationen