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