diff --git a/lib/XMonad/Internal/Shell.hs b/lib/XMonad/Internal/Shell.hs index 88566e7..d59adc9 100644 --- a/lib/XMonad/Internal/Shell.hs +++ b/lib/XMonad/Internal/Shell.hs @@ -98,20 +98,19 @@ spawnPipe = liftIO . spawnPipeRW spawnPipeRW :: T.Text -> IO Handle spawnPipeRW x = do (rI, wI) <- createPipe - (rO, wO) <- createPipe + -- (rO, wO) <- createPipe -- I'm assuming the only place this matters is when xmonad is restarted (which -- calls exec); since these are the ends of the pipe that xmonad will be -- using, this ensures they will be closed when restarting - forM_ [wI, rO] $ \fd -> setFdOption fd CloseOnExec True + err <- dup stdError + forM_ [wI, err] $ \fd -> setFdOption fd CloseOnExec True h <- mkHandle wI void $ X.xfork $ do void $ dupTo rI stdInput - void $ dupTo wO stdOutput - void $ dupTo wO stdError + void $ dupTo err stdOutput + void $ dupTo err stdError executeFile "/bin/sh" False ["-c", T.unpack x] Nothing - void $ dupTo stdError rO closeFd rI - closeFd wO return h where mkHandle fd = do