[Xmonad] help with layout modifiers

Andrea Rossato mailing_list at istitutocolli.org
Wed Aug 29 13:09:04 EDT 2007


On Wed, Aug 29, 2007 at 12:16:35PM -0400, David Roundy wrote:
> You can see the problem (yes, I'm spending even more time on this...) in
> 
> sendMessage :: Message a => a -> X ()
> sendMessage a = do n <- (W.tag . W.workspace . W.current) `fmap` gets windowset
>                    Just (l,ls) <- M.lookup n `fmap` gets layouts
>                    ml' <- modifyLayout l (SomeMessage a) `catchX` return (Just l)
>                    whenJust ml' $ \l' -> do modify $ \s -> s { layouts = M.insert n (l',ls) (layouts s) }
>                                             refresh
> 
> We read the current layout l, then we call modifyLayout, and if that gives
> us a new layout, we proceed to update the layout using the return value of
> modifyLayout.  But if modifyLayout itself *already* changed the layout,
> that change will be lost!
> 
> So what we've got is a rather complicated and unchecked constraint on
> layout behavior.  :(
> 
> My best guess as to a solution would be to enable a simple locking
> mechanism such that we can keep layouts from being modified or used while
> they're already being modified.

I had the feeling that I was hitting a limit but I could not track
down its origin. Now I understand the problem. Thanks for your time.

I hoped it could be possible to modify the layout, refresh and return
the modified layout *within* modifyLayout...

I think I'll try to find a solution myself. I doubt I'll actually find
it...

Andrea


More information about the Xmonad mailing list