{-# LANGUAGE ViewPatterns #-}
module XMonad.Actions.RotSlaves (
rotSlaves', rotSlavesUp, rotSlavesDown,
rotAll', rotAllUp, rotAllDown
) where
import XMonad
import XMonad.StackSet
import XMonad.Prelude
rotSlavesUp,rotSlavesDown :: X ()
rotSlavesUp :: X ()
rotSlavesUp = (WindowSet -> WindowSet) -> X ()
windows forall a b. (a -> b) -> a -> b
$ forall a i l s sd.
(Stack a -> Stack a) -> StackSet i l a s sd -> StackSet i l a s sd
modify' (forall a. ([a] -> [a]) -> Stack a -> Stack a
rotSlaves' (\[Window]
l -> forall a. [a] -> [a]
tail [Window]
lforall a. [a] -> [a] -> [a]
++[forall a. [a] -> a
head [Window]
l]))
rotSlavesDown :: X ()
rotSlavesDown = (WindowSet -> WindowSet) -> X ()
windows forall a b. (a -> b) -> a -> b
$ forall a i l s sd.
(Stack a -> Stack a) -> StackSet i l a s sd -> StackSet i l a s sd
modify' (forall a. ([a] -> [a]) -> Stack a -> Stack a
rotSlaves' (\[Window]
l -> forall a. [a] -> a
last [Window]
l forall a. a -> [a] -> [a]
: forall a. [a] -> [a]
init [Window]
l))
rotSlaves' :: ([a] -> [a]) -> Stack a -> Stack a
rotSlaves' :: forall a. ([a] -> [a]) -> Stack a -> Stack a
rotSlaves' [a] -> [a]
_ s :: Stack a
s@(Stack a
_ [] []) = Stack a
s
rotSlaves' [a] -> [a]
f (Stack a
t [] [a]
rs) = forall a. a -> [a] -> [a] -> Stack a
Stack a
t [] ([a] -> [a]
f [a]
rs)
rotSlaves' [a] -> [a]
f s :: Stack a
s@(Stack a
_ [a]
ls [a]
_ ) = forall a. a -> [a] -> [a] -> Stack a
Stack a
t' (forall a. [a] -> [a]
reverse [a]
revls') [a]
rs'
where (forall a. HasCallStack => [a] -> NonEmpty a
notEmpty -> a
master :| [a]
ws) = forall a. Stack a -> [a]
integrate Stack a
s
([a]
revls', forall a. HasCallStack => [a] -> NonEmpty a
notEmpty -> a
t' :| [a]
rs') = forall a. Int -> [a] -> ([a], [a])
splitAt (forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
ls) (a
masterforall a. a -> [a] -> [a]
:[a] -> [a]
f [a]
ws)
rotAllUp,rotAllDown :: X ()
rotAllUp :: X ()
rotAllUp = (WindowSet -> WindowSet) -> X ()
windows forall a b. (a -> b) -> a -> b
$ forall a i l s sd.
(Stack a -> Stack a) -> StackSet i l a s sd -> StackSet i l a s sd
modify' (forall a. ([a] -> [a]) -> Stack a -> Stack a
rotAll' (\[Window]
l -> forall a. [a] -> [a]
tail [Window]
lforall a. [a] -> [a] -> [a]
++[forall a. [a] -> a
head [Window]
l]))
rotAllDown :: X ()
rotAllDown = (WindowSet -> WindowSet) -> X ()
windows forall a b. (a -> b) -> a -> b
$ forall a i l s sd.
(Stack a -> Stack a) -> StackSet i l a s sd -> StackSet i l a s sd
modify' (forall a. ([a] -> [a]) -> Stack a -> Stack a
rotAll' (\[Window]
l -> forall a. [a] -> a
last [Window]
l forall a. a -> [a] -> [a]
: forall a. [a] -> [a]
init [Window]
l))
rotAll' :: ([a] -> [a]) -> Stack a -> Stack a
rotAll' :: forall a. ([a] -> [a]) -> Stack a -> Stack a
rotAll' [a] -> [a]
f Stack a
s = forall a. a -> [a] -> [a] -> Stack a
Stack a
r (forall a. [a] -> [a]
reverse [a]
revls) [a]
rs
where ([a]
revls, forall a. HasCallStack => [a] -> NonEmpty a
notEmpty -> a
r :| [a]
rs) = forall a. Int -> [a] -> ([a], [a])
splitAt (forall (t :: * -> *) a. Foldable t => t a -> Int
length (forall a. Stack a -> [a]
up Stack a
s)) ([a] -> [a]
f (forall a. Stack a -> [a]
integrate Stack a
s))