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 和其他属性)
我怎样才能专注于特定的应用程序类型,例如 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 和其他属性)