aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CycleWS.hs51
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