在X ()
的上下文中,如何计算工作区中当前窗口的数量?
我知道如何从WindowSet
获取计数,并且有windows :: (WindowSet -> WindowSet) -> X ()
的函数。但是,我想实际返回一个值,因此它必须是(WindowSet -> WindowSet) -> X Int
。
答案 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