xdotool の type コマンドが文字を消費する

xdotool の type コマンドが文字を消費する

私は、単純なキーの組み合わせを押すたびに、xmonad に共通の文字列を入力させようとしています。この問題の 1 つの例は、単に電子メール アドレスを入力することです。

私の場合、xmonad の設定ファイルは次のようになります。

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

ただし、メニュー キー (キーボードの右下にあります) を押すと、最後の半分程度しか表示されません。たとえば、[email protected]またはなどです[email protected]。印刷がどこから始まるかはまったく予測できません。

xdotoolコマンドを に変更することで回避策を見つけました。これは間違いなく機能するようです。しかし、その理由はわかりません。何かご意見はありますか?xdotool sleep 0.1 type [email protected]

xmonad 0.11 および xdotool バージョン 3.20140217.1 を使用

答え1

--syncまさに私が探していたオプションでした!

ただし、この--syncオプションは特定の get コマンドまたは search コマンドのセットにのみ存在します。

解決策は次のようになりました:xdotool getwindowfocus windowfocus --sync type [email protected]

ここで起こっていることは、まず を介してフォーカスされているウィンドウを取得することですgetwindowfocus(getactivewindowは、他が機能しない場合の代替手段です)。

異なる点は、アクティブ ウィンドウを取得して、それを同じものに設定することだけです。重要な違いは、前のコマンドが適用されるまで待機するように--sync強制するオプションが存在することです。xdotool

したがって、特定のウィンドウにフォーカスが当てられ、コマンドを入力できることが保証されます。

答え2

キーストローク間の遅延を増やす必要がある場合があります--delay(デフォルトは 12 ミリ秒)。

xdotool type --delay 100 [email protected]

関連情報