diff options
-rw-r--r-- | Main.hs | 100 |
1 files changed, 50 insertions, 50 deletions
@@ -34,17 +34,17 @@ import System.Posix.Files -- | The main entry point main :: IO () main = - do args <- getArgs + do args <- getArgs (o,file) <- getOpts args - conf <- case file of - [cfgfile] -> readConfig cfgfile - _ -> readDefaultConfig - c <- newIORef conf + conf <- case file of + [cfgfile] -> readConfig cfgfile + _ -> readDefaultConfig + c <- newIORef conf doOpts c o - config <- readIORef c - cl <- parseTemplate config (template config) - var <- execCommands config cl - (d,w) <- createWin config + config <- readIORef c + cl <- parseTemplate config (template config) + var <- mapM execCommand cl + (d,w) <- createWin config eventLoop config var d w return () @@ -52,7 +52,7 @@ main = readConfig :: FilePath -> IO Config readConfig f = do file <- fileExist f - s <- if file then readFile f else error $ f ++ ": file not found!\n" ++ usage + s <- if file then readFile f else error $ f ++ ": file not found!\n" ++ usage case reads s of [(config,_)] -> return config [] -> error $ f ++ ": configuration file contains errors!\n" ++ usage @@ -68,42 +68,42 @@ readDefaultConfig = data Opts = Help | Version - | Font String - | BgColor String - | FgColor String - | XPos String - | YPos String - | Width String - | Height String - | Align String - | Refresh String + | Font String + | BgColor String + | FgColor String + | XPos String + | YPos String + | Width String + | Height String + | Align String + | Refresh String | Commands String - | SepChar String + | SepChar String | Template String deriving Show options :: [OptDescr Opts] options = - [ Option ['h','?'] ["help"] (NoArg Help) "This help" - , Option ['V'] ["version"] (NoArg Version) "Show version information" - , Option ['f'] ["font"] (ReqArg Font "font name") "The font name" - , Option ['B'] ["bgcolor"] (ReqArg BgColor "bg color") "The background color. Default black" - , Option ['F'] ["fgcolor"] (ReqArg FgColor "fg color") "The foreground color. Default grey" - , Option ['x'] ["xpos"] (ReqArg XPos "x pos") "The x position. Default 0" - , Option ['y'] ["ypos"] (ReqArg YPos "y pos") "The y position. Default 0" - , Option ['W'] ["width"] (ReqArg Width "width") "The status bar width. Default 1024" - , Option ['H'] ["height"] (ReqArg Height "height") "The status bar height. Default 15" - , Option ['a'] ["align"] (ReqArg Align "align") "The text alignment: center, left or right.\nDefault: left" - , Option ['r'] ["refresh"] (ReqArg Refresh "rate") "The refresh rate in tenth of seconds:\ndefault 1 sec." - , Option ['s'] ["sepchar"] (ReqArg SepChar "char") "The character used to separate commands in\nthe output template. Default '%'" - , Option ['t'] ["template"] (ReqArg Template "tempate") "The output template" - , Option ['c'] ["commands"] (ReqArg Commands "commands") "The list of commands to be executed" + [ Option ['h','?' ] ["help" ] (NoArg Help ) "This help" + , Option ['V' ] ["version" ] (NoArg Version ) "Show version information" + , Option ['f' ] ["font" ] (ReqArg Font "font name" ) "The font name" + , Option ['B' ] ["bgcolor" ] (ReqArg BgColor "bg color" ) "The background color. Default black" + , Option ['F' ] ["fgcolor" ] (ReqArg FgColor "fg color" ) "The foreground color. Default grey" + , Option ['x' ] ["xpos" ] (ReqArg XPos "x pos" ) "The x position. Default 0" + , Option ['y' ] ["ypos" ] (ReqArg YPos "y pos" ) "The y position. Default 0" + , Option ['W' ] ["width" ] (ReqArg Width "width" ) "The status bar width. Default 1024" + , Option ['H' ] ["height" ] (ReqArg Height "height" ) "The status bar height. Default 15" + , Option ['a' ] ["align" ] (ReqArg Align "align" ) "The text alignment: center, left or right.\nDefault: left" + , Option ['r' ] ["refresh" ] (ReqArg Refresh "rate" ) "The refresh rate in tenth of seconds:\ndefault 1 sec." + , Option ['s' ] ["sepchar" ] (ReqArg SepChar "char" ) "The character used to separate commands in\nthe output template. Default '%'" + , Option ['t' ] ["template" ] (ReqArg Template "tempate" ) "The output template" + , Option ['c' ] ["commands" ] (ReqArg Commands "commands" ) "The list of commands to be executed" ] getOpts :: [String] -> IO ([Opts], [String]) getOpts argv = case getOpt Permute options argv of - (o,n,[]) -> return (o,n) + (o,n,[]) -> return (o,n) (_,_,errs) -> error (concat errs ++ usage) usage :: String @@ -127,22 +127,22 @@ doOpts :: IORef Config -> [Opts] -> IO () doOpts _ [] = return () doOpts conf (o:oo) = case o of - Help -> putStr usage >> exitWith ExitSuccess - Version -> putStrLn version >> exitWith ExitSuccess - Font s -> modifyIORef conf (\c -> c { font = s }) >> go - BgColor s -> modifyIORef conf (\c -> c { bgColor = s }) >> go - FgColor s -> modifyIORef conf (\c -> c { fgColor = s }) >> go - XPos s -> modifyIORef conf (\c -> c { xPos = readInt s c xPos}) >> go - YPos s -> modifyIORef conf (\c -> c { yPos = readInt s c yPos }) >> go - Width s -> modifyIORef conf (\c -> c { width = readInt s c width }) >> go - Height s -> modifyIORef conf (\c -> c { height = readInt s c height }) >> go - Align s -> modifyIORef conf (\c -> c { align = s }) >> go - Refresh s -> modifyIORef conf (\c -> c { refresh = readInt s c refresh }) >> go - SepChar s -> modifyIORef conf (\c -> c { sepChar = s }) >> go - Template s -> modifyIORef conf (\c -> c { template = s }) >> go + Help -> putStr usage >> exitWith ExitSuccess + Version -> putStrLn version >> exitWith ExitSuccess + Font s -> modifyIORef conf (\c -> c { font = s }) >> go + BgColor s -> modifyIORef conf (\c -> c { bgColor = s }) >> go + FgColor s -> modifyIORef conf (\c -> c { fgColor = s }) >> go + XPos s -> modifyIORef conf (\c -> c { xPos = readInt s c xPos }) >> go + YPos s -> modifyIORef conf (\c -> c { yPos = readInt s c yPos }) >> go + Width s -> modifyIORef conf (\c -> c { width = readInt s c width }) >> go + Height s -> modifyIORef conf (\c -> c { height = readInt s c height }) >> go + Align s -> modifyIORef conf (\c -> c { align = s }) >> go + Refresh s -> modifyIORef conf (\c -> c { refresh = readInt s c refresh }) >> go + SepChar s -> modifyIORef conf (\c -> c { sepChar = s }) >> go + Template s -> modifyIORef conf (\c -> c { template = s }) >> go Commands s -> case readCom s of Right x -> modifyIORef conf (\c -> c { commands = x })>> go - Left e -> putStr (e ++ usage) >> exitWith (ExitFailure 1) + Left e -> putStr (e ++ usage) >> exitWith (ExitFailure 1) where readCom str = case readStr str of [x] -> Right x @@ -153,4 +153,4 @@ doOpts conf (o:oo) = _ -> f c readStr str = [x | (x,t) <- reads str, ("","") <- lex t] - go = doOpts conf oo
\ No newline at end of file + go = doOpts conf oo |