
Hello, thanks a lot for your work! It works :) The short version "let prm (one:two:rest) = two:one:rest" is enough, because I only need to switch the first two elements. With this hack I don't need the colour thing. Thanks again! Regards, Felix On 07. October 2010 - 21:31, Norbert Zeh wrote:
Date: Thu, 7 Oct 2010 21:31:44 -0300 From: Norbert Zeh
To: XMonad Mailing List Subject: Re: [xmonad] ppVisible with 3 screens Felix Blanke [2010.10.04 0114 +0200]:
The getXineramaWsCompare maybe?! :)
getXineramaWsCompare :: X WorkspaceCompare getXineramaWsCompare = do w <- gets windowset return $ \ a b -> case (isOnScreen a w, isOnScreen b w) of (True, True) -> comparing (tagToSid (onScreen w)) a b (False, False) -> compare a b (True, False) -> LT (False, True) -> GT where onScreen w = S.current w : S.visible w isOnScreen a w = a `elem` map (S.tag . S.workspace) (onScreen w) tagToSid s x = S.screen $ fromJust $ find ((== x) . S.tag . S.workspace) s
The getSortByXineramaRule use that function:
getSortByXineramaRule :: X WorkspaceSort getSortByXineramaRule = mkWsSort getXineramaWsCompare
But like I said: I'm a haskell noob. When I understand those functions right the getXineramaWsCompare creates a ranking where the visible workspaces get the smallest id and mkWsSort then sorts that output.
I have to thing about that how to change that ranking to get them in the right order.
Alright, Felix, as promised here comes the way to do this. I'm not sure about your setup. So you may have to tweak it a little. I assume here that your left screen is #2, middle is #1, right is #3.
The easiest way to get what you want (in addition to what I said in the previous email) is the following:
1) Hook your custom sorting function into the log hook
ppSort = myXineramaSorter
2) Actually write your custom sorting function
myXineramaSorter = do srt <- getSortByXineramaRule let prm (one:two:three:rest) = two:one:three:rest return (prm . srt)
All this does is permute the first three workspaces (which the standard xinerama sorter guarantees are the visible ones) in the order (2,1,3). In this example, since we're only swapping the first two screens, you could actually simplify this to
let prm (one:two:rest) = two:one:rest
(Note: I'm typing this from a windows box :( and, thus, haven't tested this. Let me know if it doesn't work.)
Now this does not do the colour coding you wanted, but that may actually no longer be necessary if you just see your three screens in the right order.
Cheers, Norbert _______________________________________________ xmonad mailing list xmonad@haskell.org http://www.haskell.org/mailman/listinfo/xmonad ---end quoted text---