【问题标题】:How can I focus window by application / class name in XMonad如何在 XMonad 中按应用程序/类名聚焦窗口
【发布时间】:2015-08-06 19:45:15
【问题描述】:

我正在尝试做相当于

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 中有没有办法以编程方式切换到某个应用程序?

【问题讨论】:

    标签: x11 xmonad xdotool


    【解决方案1】:

    这是我使用的,受 XMonad.Util.WindowBringer 启发。您需要安装 Text.PCRE 包。如果我忘记了任何 import 语句,我们深表歉意。

    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" &gt;&gt; spawn "xdotool key --clearmodifiers ctrl+r"。但是,这对我不起作用,显然是由于我不理解的一些比赛条件。幸运的是,我发现以下方法有效:

    warpTo "Chromium" >> spawn "sleep 0.2; xdotool key --clearmodifiers ctrl+r"
    

    您也许可以在更短的时间内逃脱。

    【讨论】:

      猜你喜欢
      • 2010-11-03
      • 1970-01-01
      • 2020-12-06
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2021-08-04
      相关资源
      最近更新 更多