diff options
author | jao <jao@gnu.org> | 2018-11-25 07:35:54 +0000 |
---|---|---|
committer | jao <jao@gnu.org> | 2018-11-25 07:35:54 +0000 |
commit | 426c931d5b0ebc6d53396c34ec38eb342be501c3 (patch) | |
tree | 85ee8fc4b09384017b52a4822b61ebceffb8e95b /src/lib/Xmobar/Commands.hs | |
parent | c763954685fd3f4d8998cd26cb4b9625fe6cb8e6 (diff) | |
download | xmobar-426c931d5b0ebc6d53396c34ec38eb342be501c3.tar.gz xmobar-426c931d5b0ebc6d53396c34ec38eb342be501c3.tar.bz2 |
Refactoring: Xmobar.Run
Diffstat (limited to 'src/lib/Xmobar/Commands.hs')
-rw-r--r-- | src/lib/Xmobar/Commands.hs | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/src/lib/Xmobar/Commands.hs b/src/lib/Xmobar/Commands.hs deleted file mode 100644 index 5917bb8..0000000 --- a/src/lib/Xmobar/Commands.hs +++ /dev/null @@ -1,72 +0,0 @@ ------------------------------------------------------------------------------ --- | --- Module : Xmobar.Commands --- Copyright : (c) Andrea Rossato --- License : BSD-style (see LICENSE) --- --- Maintainer : Jose A. Ortega Ruiz <jao@gnu.org> --- Stability : unstable --- Portability : unportable --- --- The 'Exec' class and the 'Command' data type. --- --- The 'Exec' class rappresents the executable types, whose constructors may --- appear in the 'Config.commands' field of the 'Config.Config' data type. --- --- The 'Command' data type is for OS commands to be run by xmobar --- ------------------------------------------------------------------------------ - -module Xmobar.Commands (Command (..), Exec (..)) where - -import Prelude -import Control.Exception (handle, SomeException(..)) -import Data.Char -import System.Process -import System.Exit -import System.IO (hClose) - -import Xmobar.System.Signal -import Xmobar.Utils (hGetLineSafe, tenthSeconds) - -class Show e => Exec e where - alias :: e -> String - alias e = takeWhile (not . isSpace) $ show e - rate :: e -> Int - rate _ = 10 - run :: e -> IO String - run _ = return "" - start :: e -> (String -> IO ()) -> IO () - start e cb = go - where go = run e >>= cb >> tenthSeconds (rate e) >> go - trigger :: e -> (Maybe SignalType -> IO ()) -> IO () - trigger _ sh = sh Nothing - -data Command = Com Program Args Alias Rate - | ComX Program Args String Alias Rate - deriving (Show,Read,Eq) - -type Args = [String] -type Program = String -type Alias = String -type Rate = Int - -instance Exec Command where - alias (ComX p _ _ a _) = - if p /= "" then (if a == "" then p else a) else "" - alias (Com p a al r) = alias (ComX p a "" al r) - start (Com p as al r) cb = - start (ComX p as ("Could not execute command " ++ p) al r) cb - start (ComX prog args msg _ r) cb = if r > 0 then go else exec - where go = exec >> tenthSeconds r >> go - exec = do - (i,o,e,p) <- runInteractiveProcess prog args Nothing Nothing - exit <- waitForProcess p - let closeHandles = hClose o >> hClose i >> hClose e - getL = handle (\(SomeException _) -> return "") - (hGetLineSafe o) - case exit of - ExitSuccess -> do str <- getL - closeHandles - cb str - _ -> closeHandles >> cb msg |