diff options
author | Don Stewart <dons@cse.unsw.edu.au> | 2007-03-12 07:26:12 +0100 |
---|---|---|
committer | Don Stewart <dons@cse.unsw.edu.au> | 2007-03-12 07:26:12 +0100 |
commit | 670bef2d339a1e4c4e204e739663f5ae4014ca1f (patch) | |
tree | bc178f82936fee78deb3f25071fe7149bd705c61 | |
parent | bbe54d90ad92ec76f05ca9ad5bc02d8959e47973 (diff) | |
download | metatile-670bef2d339a1e4c4e204e739663f5ae4014ca1f.tar metatile-670bef2d339a1e4c4e204e739663f5ae4014ca1f.zip |
catch exceptions in spawn, so failing to fork won't kill the wm
darcs-hash:20070312062612-9c5c1-bd010ffbd84cfe17ec71b264c390ab030b6b4a6c
-rw-r--r-- | XMonad.hs | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -26,6 +26,7 @@ import Control.Monad.State import System.IO import System.Process (runCommand) import Graphics.X11.Xlib +import Control.Exception -- | XState, the window manager state. -- Just the display, width, height and a window list @@ -72,7 +73,8 @@ io = liftIO -- | spawn. Launch an external application spawn :: String -> X () -spawn x = io (runCommand x) >> return () +spawn x = do v <- io $ handle (return . Just) (runCommand x >> return Nothing) + whenJust v $ \e -> trace $ "xmonad:spawn: unable to fork "++show x++": "++show e -- | Run a side effecting action with the current workspace. Like 'when' but whenJust :: Maybe a -> (a -> X ()) -> X () |