我尝试让 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]