我试图做相同的
xdotool search "Chromium" windowactivate --sync key --clearmodifiers ctrl+r
即。我想切换到Chromium并重新加载当前页面。 但是,使用XMonad,我收到以下错误:
Your windowmanager claims not to support _NET_ACTIVE_WINDOW, so the attempt to activate the window was aborted.
XMonad中是否有办法以编程方式切换到某个应用程序?
答案 0 :(得分:1)
以下是我使用的内容,灵感来自XMonad.Util.WindowBringer。您需要安装Text.PCRE包。如果我忘记了任何重要声明,请道歉。
import XMonad
import qualified XMonad.StackSet as W
import XMonad.Util.NamedWindows (getName)
import Control.Applicative ((<$>))
import Data.List (find)
import Text.Regex.PCRE ((=~))
findWindow :: String -> X (Maybe Window)
findWindow regex = do
wmap <- concat <$> (mapM mappings =<< (W.workspaces <$> gets windowset))
:: X [(String, Window)]
return (snd <$> find ((=~ regex) . fst) wmap)
where mappings :: WindowSpace -> X [(String, Window)]
mappings ws = mapM mapping $ W.integrate' (W.stack ws)
mapping w = flip (,) w <$> show <$> getName w
warpTo :: String -> X ()
warpTo regex =
findWindow regex >>= (flip whenJust $ windows . W.focusWindow)
原则上,您应该能够将密钥绑定到warpTo "Chromium" >> spawn "xdotool key --clearmodifiers ctrl+r"
。然而,这对我来说并不起作用,显然是由于一些我不明白的竞争条件。幸运的是,我发现以下工作:
warpTo "Chromium" >> spawn "sleep 0.2; xdotool key --clearmodifiers ctrl+r"
你可能会有更短的延迟。