如何获取当前工作空间中的窗口数?

时间:2017-11-01 09:16:10

标签: xmonad

X ()的上下文中,如何计算工作区中当前窗口的数量?

我知道如何从WindowSet获取计数,并且有windows :: (WindowSet -> WindowSet) -> X ()的函数。但是,我想实际返回一个值,因此它必须是(WindowSet -> WindowSet) -> X Int

3 个答案:

答案 0 :(得分:2)

更短版本的Chris没有附加功能。 如果ws'代表他的答案中的窗口列表长度,那么:
ws' <- length . W.integrate' . W.stack . W.workspace . W.current . windowset <$> get

答案 1 :(得分:1)

我设法通过查看windows的实现来解决这个问题。

import XMonad (windows, X, WindowSet, XState(XState, windowset))
import qualified XMonad.StackSet as W
import Control.Monad.State


getWindowState :: X (WindowSet)
getWindowState = do
    XState { windowset = old } <- get
    return $ old

然后在X ()

的范围内
ws <- getWindowState >>= (return . W.stack . W.workspace . W.current)
let ws' = maybe 0 (length . W.integrate) ws

答案 2 :(得分:0)

借助W.index,即使是更短的变体形式:

winCount = length . W.index . windowset <$> get
winCount = gets (windowset) >>= return . length . W.index
winCount = gets (W.index . windowset) >>= return . length