diff options
Diffstat (limited to '')
-rw-r--r-- | RotView.hs | 23 |
1 files changed, 13 insertions, 10 deletions
@@ -12,21 +12,24 @@ import qualified Data.Map as M import Control.Monad.State import Operations ( view ) -import XMonad ( X, WorkspaceId, workspace ) -import StackSet ( StackSet, focus ) -import qualified StackSet as W ( current ) +import XMonad ( X, WorkspaceId, workspace, whenJust ) +import StackSet ( StackSet ) +import Data.Maybe ( listToMaybe ) +import qualified StackSet as W ( stacks, current, visibleWorkspaces, index ) rotView :: Bool -> X () rotView b = do ws <- gets workspace let m = W.current ws + vis = W.visibleWorkspaces ws allws = if b then allWorkspaces ws else reverse $ allWorkspaces ws - n1 = safehead allws m - rot (f:fs) | f == m = safehead fs n1 - | otherwise = rot fs - rot [] = n1 - safehead fs f = case fs of { [] -> f; f':_ -> f'; } - view (rot allws) + pivoted = uncurry (flip (++)) . span (/=m) $ allws + interesting i = not (i `elem` vis) && not (isEmpty i ws) + nextws = listToMaybe . filter interesting $ pivoted + whenJust nextws view -- | A list of all the workspaces. allWorkspaces :: StackSet WorkspaceId j a -> [WorkspaceId] -allWorkspaces = M.keys . focus +allWorkspaces = M.keys . W.stacks + +isEmpty :: WorkspaceId -> StackSet WorkspaceId j a -> Bool +isEmpty i = maybe True null . W.index i |