From 656c004bd143fd354667f8f1d2e8786d5cbb4b96 Mon Sep 17 00:00:00 2001 From: Spencer Janssen Date: Sat, 22 Dec 2007 11:41:14 +0100 Subject: Factor workspace sorting into a separate module darcs-hash:20071222104114-a5988-bfd9059d0556a526c275b6d0e4a930103bd7d990.gz --- XMonad/Util/WorkspaceCompare.hs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 XMonad/Util/WorkspaceCompare.hs (limited to 'XMonad/Util/WorkspaceCompare.hs') diff --git a/XMonad/Util/WorkspaceCompare.hs b/XMonad/Util/WorkspaceCompare.hs new file mode 100644 index 0000000..93bd597 --- /dev/null +++ b/XMonad/Util/WorkspaceCompare.hs @@ -0,0 +1,37 @@ +----------------------------------------------------------------------------- +-- | +-- Module : XMonad.Util.WorkspaceCompare +-- Copyright : (c) Spencer Janssen +-- License : BSD3-style (see LICENSE) +-- +-- Maintainer : Spencer Janssen +-- Stability : unstable +-- Portability : unportable +-- + +module XMonad.Util.WorkspaceCompare ( getWsIndex, getWsCompare, getSortByTag ) where + +import XMonad +import qualified XMonad.StackSet as S +import Data.List +import Data.Monoid + +getWsIndex :: X (WorkspaceId -> Maybe Int) +getWsIndex = do + spaces <- asks (workspaces . config) + return $ flip elemIndex spaces + +getWsCompare :: X (WorkspaceId -> WorkspaceId -> Ordering) +getWsCompare = do + wsIndex <- getWsIndex + return $ \a b -> f (wsIndex a) (wsIndex b) `mappend` compare a b + where + f Nothing Nothing = EQ + f (Just _) Nothing = LT + f Nothing (Just _) = GT + f (Just x) (Just y) = compare x y + +getSortByTag :: X ([WindowSpace] -> [WindowSpace]) +getSortByTag = do + cmp <- getWsCompare + return $ sortBy (\a b -> cmp (S.tag a) (S.tag b)) -- cgit v1.2.3