summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Main.hs100
1 files changed, 50 insertions, 50 deletions
diff --git a/Main.hs b/Main.hs
index 8cf0403..b194b3c 100644
--- a/Main.hs
+++ b/Main.hs
@@ -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