XMonad 我怎样才能按名称/class 名称专注于特定的 window?

XMonad how can I focus on a particular window by name / class name?

我怎样才能专注于特定的应用程序类型,例如 Firefox?

我想将它绑定到一个键绑定 - 所以这不会以交互方式完成。

module WindowFinder where

import XMonad
import qualified XMonad.StackSet as W
import Control.Monad
import Data.Bool  (bool)

findWindows :: String -> X [Window]
findWindows name = do
  withWindowSet $ (\ws -> do
    forM (W.allWindows ws)
      (\w -> do
            s <- withDisplay $ \d -> fmap resClass . liftIO $ getClassHint d w
            return $ bool [] [w] (s == name) :: X [Window]
      ) >>= return . join
    )

并且在 X () 上下文中:

        win' <- findWindows "Chromium"
        when (length win' > 0)
          (windows $ W.focusWindow $ head win')

当有多个 windows 时,上面的行为似乎非常有用。行为似乎是,返回的第一个 window 是当前在工作区中打开的 window,或者是该应用程序类型的最后一个交互 window。

你绝对应该看看 XMonad-Actions-WindowGo,尤其是 raiseNextMaybe / raiseNext / runOrRaise

类似

((modMask x .|. mod1Mask, xK_BackSpace), raiseNextMaybe (spawn "google-chrome --profile-directory='Default' --app='https://www.evernote.com/Home.action'") (appName =? "www.evernote.com__Home.action"))

此外,查看 xprop 应用程序(它允许获取 window class 和其他属性)