
On Mon, Jan 26, 2009 at 11:36:05AM +0100, Karl Hasselström wrote:
Two questions for those who've been using this nice WM longer than I have ...
1. I have two monitors, one that's nice and big, and one that's attached to my laptop. How do I swap the workspaces on them? That is, if they currently show workspaces A and B, what action should I bind to a key to make them show B and A?
I imagine this is just a matter of transforming StackSet the right way, but I haven't been able to figure out exactly how.
Try the "swapNextScreen" function from CycleWS.
2. Currently, I've bound mod-Right/Left and ctrl-mod-Right/Left to switching to the next Xinerama screen and the next visible window in that direction:
import qualified XMonad.Actions.CycleWS as CWS import qualified XMonad.Layout.WindowNavigation as WN
, ((modMask x, xK_Right), CWS.nextScreen) , ((modMask x, xK_Left), CWS.prevScreen) , ((modMask x .|. controlMask, xK_Right), sendMessage $ WN.Go WN.R) , ((modMask x .|. controlMask, xK_Left ), sendMessage $ WN.Go WN.L)
However, what I'd like to do is have just one binding for these two tasks, so that mod-Right would switch focus to the next window to the right until it reached the edge of the screen, and then the next press would switch focus to the leftmost window on the Xinerama screen to the right of the one where I just was.
Hmm, that's a tricky one. It should be possible in theory, but you would need to implement something pretty low-level to make it work, maybe even a brand new layout modifier based on the WindowNavigation one. This could make a nice project for someone. The problem is that there's no way (currently) for the WindowNavigation layout modifier to report what it did (whether it actually moved the focus to a different window or not), so no way to take another action conditioned on that result. -Brent