module Sound.Sox.System where import qualified System.Posix.Signals as Signals import Control.Exception (bracket, ) {- | Disable sigPIPE for a local action. If we don't call this, GHCi quits, when the playing command is aborted with CTRL-C. Unfortunately there doesn't seem to be another way of doing this. -} catchCtrlC :: IO () catchCtrlC = Signals.installHandler Signals.sigPIPE Signals.Ignore Nothing >> return () {- This won't help in GHCi, since the old handler will terminate GHCi as soon as it is installed, again. -} ignoreCtrlC :: IO a -> IO a ignoreCtrlC act = bracket (Signals.installHandler Signals.sigPIPE Signals.Ignore Nothing) (\handler -> Signals.installHandler Signals.sigPIPE handler Nothing) (const act)