如何获取当前工作区中 windows 的计数?
How can I get the count of windows in the current workspace?
在 X ()
的上下文中,如何获取工作区中当前 windows 的计数?
我知道如何从WindowSet
获取计数并且有windows :: (WindowSet -> WindowSet) -> X ()
的功能。但是我实际上想要 return 一个值,所以它必须是 (WindowSet -> WindowSet) -> X Int
.
我通过查看 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
Chris answer 的简短版本,没有附加功能。
如果 ws'
代表 windows 列表的长度,就像他的回答一样,那么:
ws' <- length . W.integrate' . W.stack . W.workspace . W.current . windowset <$> get
由于 W.index:
,变体更短
winCount = length . W.index . windowset <$> get
winCount = gets (windowset) >>= return . length . W.index
winCount = gets (W.index . windowset) >>= return . length
在 X ()
的上下文中,如何获取工作区中当前 windows 的计数?
我知道如何从WindowSet
获取计数并且有windows :: (WindowSet -> WindowSet) -> X ()
的功能。但是我实际上想要 return 一个值,所以它必须是 (WindowSet -> WindowSet) -> X Int
.
我通过查看 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
Chris answer 的简短版本,没有附加功能。
如果 ws'
代表 windows 列表的长度,就像他的回答一样,那么:
ws' <- length . W.integrate' . W.stack . W.workspace . W.current . windowset <$> get
由于 W.index:
,变体更短winCount = length . W.index . windowset <$> get
winCount = gets (windowset) >>= return . length . W.index
winCount = gets (W.index . windowset) >>= return . length