xdotool 的 type 命令吃字符

waf*_*cat 5 command-line keyboard shortcut-keys xmonad xdotool

每当我按下一个简单的组合键时,我都试图让 xmonad 输入一个常见的字符序列。这个问题的一个例子是简单地输入我的电子邮件地址。

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 thisismyemail@example.com") ]

    insKeys :: XConfig l -> [((KeyMask, KeySym), X())]
    insKeys XConfig { modMask = modMask } = insertEmailAddress modMask
Run Code Online (Sandbox Code Playgroud)

但是,当我按下菜单键(它在键盘的右下角)时,我只能得到后一半左右。如:yemail@example.comisismyemail@example.com。打印将从哪里开始是完全不可预测的。

我通过将xdotool命令更改为xdotool sleep 0.1 type thisismyemail@example.com. 这似乎没有失败,但我不知道为什么。有什么想法吗?

使用 xmonad 0.11 和 xdotool 版本 3.20140217.1

waf*_*cat 5

这个--sync选项正是我想要的!

但是,该--sync选项仅存在于一组特定的 get 或 search 命令中。

解决方案结果是:xdotool getwindowfocus windowfocus --sync type thisismyemail@example.com

getwindowfocus这里发生的事情是,我们首先通过(getactivewindow如果另一个不起作用,则可以选择)获得聚焦的窗口。

我们所做的一切不同就是获取活动窗口并将其设置为相同的内容。关键区别在于存在--sync强制xdotool等待直到应用上一个命令的选项。

因此,我们保证我们专注于特定窗口并且能够键入命令。