
xmonad:
Thanks Robert! I got your code to work in my Config.hs without any modifications to xmonad. Here's what I have:
pointerFollowsFocus :: Rational -> Rational -> X () pointerFollowsFocus h v = do dpy <- asks display root <- asks theRoot withFocused $ \w -> do wa <- io $ getWindowAttributes dpy w (sameRoot,_,w',_,_,_,_,_) <- io $ queryPointer dpy root if (sameRoot && w == w') then return () else io $ warpPointer dpy none w 0 0 0 0 (fraction h (wa_width wa)) (fraction v (wa_height wa)) where fraction x y = floor (x * fromIntegral y) [...] logHook = dynamicLogWithPP hethraelPP {ppOutput = hPutStrLn xmobar } >> pointerFollowsFocus 1 1
'unless' was not in scope, so I changed it to an if statement.
I have found a couple of issues with it, but otherwise it's great. First, the pointer warps when tabs are clicked. The second is a little more complicated. When using a full or tabbed layout, calling focusDown (mod+J) to move from the last window to the first window causes the pointer to warp even if the pointer is in the window. When calling focusUp (mod+K), the pointer always warps unless moving from the master window to the last window.
Once this is finalised, can we get it as an extension module for mouse/pointer stuff. Saves people reimplementing this functionality