xdotool 的 type 命令吃字符

xdotool 的 type 命令吃字符

我尝试让 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 [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选项仅存在于特定的一组获取或搜索命令中。

解决方案如下:xdotool getwindowfocus windowfocus --sync type [email protected]

getwindowfocus这里发生的情况是,我们首先通过(getactivewindow如果其他方法不起作用,则可以采用另一种方法)获得焦点窗口。

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

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

答案2

您可能需要增加按键之间的延迟--delay(默认为 12ms):

xdotool type --delay 100 [email protected]

相关内容