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

Adam Sjøgren asjo at koldfront.dk
Fri Jan 1 14:41:32 UTC 2016


Brandon writes:

> 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 have put a "putStrLn" in before each call to getWindowAttributes in my
local XMonad, and I am recording every time it crashes, so I am not
expecting an exception in this place, I had one!

Just aborting altogether I think I can manage - I will give it a shot.

Thanks!

>> 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.)

(Given how low I am on the understanding-ladder, I don't feel bad at all
- I've just come to realize that I need to solve "real" problems to get
anywhere, but sometimes I get stuck, and sometimes I am too lazy to loop
back to reading up on Haskell, so I ask instead. Thanks for helping!)


  Best regards,

    Adam

-- 
 "They misunderestimated me."                                 Adam Sjøgren
                                                         asjo at koldfront.dk



More information about the xmonad mailing list