
On Thu, Aug 02, 2007 at 12:55:13AM +0200, Hans Philipp Annen wrote:
Hello List, ... Hi,
I was not sure whether I should put this in XMonadContrib, since I think it's a candidate for Operations.hs.
Anyway, here is the function:
rotSlaves :: SS.StackSet i a s sd -> SS.StackSet i a s sd rotSlaves = SS.modify' rotSlaves'
rotSlaves' :: SS.Stack a -> SS.Stack a rotSlaves' (SS.Stack t ls rs) | (null ls) = SS.Stack t [] ((rearRs)++(frontRs)) --Master has focus | otherwise = SS.Stack t' (reverse ((master)++revls')) rs' --otherwise where (frontRs, rearRs) = splitAt (max 0 ((length rs) - 1) rs (ils, master) = splitAt (max 0 ((length ls) - 1) ls toBeRotated = (reverse ils)++(t:rs) (revls',t':rs') = splitAt (length ils) ((last toBeRotated):(init toBeRotated))
I think I have a version which is easier to understand (at least for me): rotSlaves' s@(SS.Stack _ [] []) = s rotSlaves' (SS.Stack t [] (r:rs)) = SS.Stack t [] (rs ++ [r]) --Master has focus rotSlaves' (SS.Stack t ls rs) = SS.Stack t' (reverse (master:revls')) rs' --otherwise where (master:q:revls') = reverse (t:ls) (t':rs') = (rs ++ [q]) Actually it rotates the slaves into the other direction (which made it simpler), but that shouldn't matter much when using the TwoPane layout.
I hope someone else will find that usefull...
Hans Philipp Annen
Karsten Schölzel -- Karsten Schölzel | Email: kuser@gmx.de Friedrichstraße 7 | Jabber: topox@jabber.ccc.de 18057 Rostock | VoIP: sip:5857712@sipgate.de Germany | sip:708529@fwd.pulver.com | Tel: +4918015855857712 | Mobile: +491627144185