[xmonad] Slowly, slowly getting calls to getWindowAttributes in XMonad to handle exceptions

Brandon Allbery allbery.b at gmail.com
Fri Jan 1 03:54:20 UTC 2016


On Thu, Dec 31, 2015 at 5:53 PM, Adam Sjøgren <asjo at koldfront.dk> wrote:

>   -- manage a new window
>   handle (MapRequestEvent    {ev_window = w}) = withDisplay $ \dpy -> do
>       wa <- io $ getWindowAttributes dpy w -- ignore override windows
>       -- need to ignore mapping requests by managed windows not on the
> current workspace
>       managed <- isClient w
>       when (not (wa_override_redirect wa) && not managed) $ do manage w
>
> What needs to happen is that I need to wrap this, so if
> getWindowAttributes throws an exception, something reasonable happens.
>

What exceptions are you expecting? The only one I'd expect is no such
window, in which case you kinda want to abort anyway.

I've tried a number of combinations of wrapping C.handle around this,
> similar to what I have found before², but I certainly need (to read a
> lot more, or, some) help - I keep getting IO () when I need X (), or the
> opposite, and stuff like that.
>

http://xmonad.org/xmonad-docs/xmonad/XMonad-Core.html#v:catchX to catch
exceptions from code producing X something.
http://xmonad.org/xmonad-docs/xmonad/XMonad-Core.html#v:catchIO to catch
exceptions from code producing IO something.

(Don't feel too bad about this, it's actually a surprisingly hard problem
in the general case. MonadBaseControl grew out of trying to deal with it in
various situations, because it's hard to do "catch" properly in a monad
over IO and impossible to do "bracket" properly. Specific cases can be
done, as above catchX / catchIO, but even then require some thinking to
write in the first place.)

-- 
brandon s allbery kf8nh                               sine nomine associates
allbery.b at gmail.com                                  ballbery at sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/xmonad/attachments/20151231/6729070b/attachment.html>


More information about the xmonad mailing list