[xmonad] Managehook which only shifts window if workspace is empty
allbery.b at gmail.com
Sun Feb 12 00:11:25 CET 2012
On Sat, Feb 11, 2012 at 17:46, Toby Cubitt <tsc25 at cantab.net> wrote:
> I'm trying to write a Managehook that only shifts a window to workspace
> if that workspace is empty. But I'm quickly realising I don't have a good
> enough grasp of Xmonad types, and Haskell monads in general, to get it to
> So far, the closest I think I've got is the following:
> myManageHook = [ className =? "mutt" --> doShiftEmpty "email" ]
> where doShiftEmpty t = when (isEmpty t) (doShift t)
> isEmpty t = do wsl <- gets $ W.workspaces . windowset
> let mws = find (\ws -> W.tag ws == t)
> return $ maybe True (isNothing .
> W.stack) mws
> which throws a type error:
> "Couldn't match expected type `Bool' with actual type `m0 Bool'
The problem here is that your function wants to execute in the X monad, but
is actually running in the Query monad because it's in a ManageHook. The
fix is to wrap it in liftX:
className =? "mutt" --> liftX (doShiftEmpty "email")
By the way, did you really mean className there? mutt is terminal based;
className will therefore always be the terminal program you're using, and
will start with an uppercase letter. Assuming you're using -name or
similar to set the instance name for the terminal to "mutt", you probably
want appName instead.
brandon s allbery allbery.b at gmail.com
wandering unix systems administrator (available) (412) 475-9364 vm/sms
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the xmonad