diff options
-rw-r--r-- | CycleWS.hs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/CycleWS.hs b/CycleWS.hs new file mode 100644 index 0000000..a3b9f19 --- /dev/null +++ b/CycleWS.hs @@ -0,0 +1,51 @@ +----------------------------------------------------------------------------- +-- | +-- Module : XMonadContrib.CycleWS +-- Copyright : (C) 2007 Andrea Rossato +-- License : BSD3 +-- +-- Maintainer : andrea.rossato@unibz.it +-- Stability : unstable +-- Portability : unportable +-- +-- A module to cycle between Workspaces +-- +----------------------------------------------------------------------------- + +module XMonadContrib.CycleWS ( + -- * Usage + -- $usage + nextWS + , prevWS + ) where + +import XMonad +import Operations +import qualified StackSet as W +import {-# SOURCE #-} Config (workspaces) +import Data.List + +-- $usage +-- Import this module in Config.hs: +-- +-- > import XMonadContrib.CycleWS +-- +-- And add, in you key bindings: +-- +-- > , ((modMask , xK_comma ), prevWS ) +-- > , ((modMask , xK_period), nextWS ) + +nextWS, prevWS :: X () +nextWS = withWindowSet $ \s -> view (workspaces !! (setWS s N)) +prevWS = withWindowSet $ \s -> view (workspaces !! (setWS s P)) + +data Dir = P | N deriving Eq +setWS :: WindowSet -> Dir -> Int +setWS s d + | d == N && cur == (lw - 1) = 0 + | d == N = cur + 1 + | d == P && cur == 0 = lw - 1 + | otherwise = cur - 1 + where + cur = maybe 0 id $ elemIndex (W.tag (W.workspace ((W.current s)))) workspaces + lw = length workspaces |