diff options
author | Ulrik de Muelenaere <ulrikdem@gmail.com> | 2024-03-30 10:42:03 -0400 |
---|---|---|
committer | Ulrik de Muelenaere <ulrikdem@gmail.com> | 2024-03-30 10:42:03 -0400 |
commit | 9349871b9eb888d1d1b7f552ea40f8d348b16c1b (patch) | |
tree | 4fc1ada0d16328c18b01cea129488d43946e8c2d /src/Xmobar/Run | |
parent | 8ed665cc20568e877b5400944dbfa752833971bc (diff) | |
download | xmobar-9349871b9eb888d1d1b7f552ea40f8d348b16c1b.tar.gz xmobar-9349871b9eb888d1d1b7f552ea40f8d348b16c1b.tar.bz2 |
Fix zombie processes left by <action> tag and low battery action
This effectively reverts c54d93e and 991a168. While those fix #687 and
#688 respectively in the case where the configuration is recompiled, in
all other cases they leave zombie processes, since they undo the fix for
#181.
However, instead of reverting to the deprecated system function, we use
the newer spawnCommand and waitForProcess. And like with 991a168, the
low battery action now runs in the background to avoid blocking the bar.
Diffstat (limited to 'src/Xmobar/Run')
-rw-r--r-- | src/Xmobar/Run/Actions.hs | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/Xmobar/Run/Actions.hs b/src/Xmobar/Run/Actions.hs index 51dbb85..cbc10c5 100644 --- a/src/Xmobar/Run/Actions.hs +++ b/src/Xmobar/Run/Actions.hs @@ -16,7 +16,7 @@ module Xmobar.Run.Actions ( Button , runAction' , stripActions) where -import System.Process (spawnCommand) +import System.Process (spawnCommand, waitForProcess) import Control.Monad (void) import Text.Regex (Regex, subRegex, mkRegex, matchRegex) import Data.Word (Word32) @@ -26,11 +26,11 @@ type Button = Word32 data Action = Spawn [Button] String deriving (Eq, Read, Show) runAction :: Action -> IO () -runAction (Spawn _ s) = void $ spawnCommand s +runAction (Spawn _ s) = void $ spawnCommand (s ++ " &") >>= waitForProcess -- | Run action with stdout redirected to stderr runAction' :: Action -> IO () -runAction' (Spawn _ s) = void $ spawnCommand (s ++ " 1>&2") +runAction' (Spawn _ s) = void $ spawnCommand (s ++ " 1>&2 &") >>= waitForProcess stripActions :: String -> String stripActions s = case matchRegex actionRegex s of |