summaryrefslogtreecommitdiffhomepage
path: root/Main.hs
diff options
context:
space:
mode:
authorAdam Vogt <vogt.adam@gmail.com>2009-09-23 04:28:35 +0200
committerAdam Vogt <vogt.adam@gmail.com>2009-09-23 04:28:35 +0200
commitdf35f664776cbb4b588f9ee71853d2be784364fc (patch)
treee3086454bfb8136ab99659aecd6df763ffda9f0d /Main.hs
parent7514c05975601d5816c696a8072b23142e8f0802 (diff)
downloadxmobar-df35f664776cbb4b588f9ee71853d2be784364fc.tar.gz
xmobar-df35f664776cbb4b588f9ee71853d2be784364fc.tar.bz2
Output to stdout whenever fields are defaulted in a config.
Ignore-this: 3bf71f10543f14aa17b6b403480bcdde This is done without a command line flag, but perhaps it should be. darcs-hash:20090923022835-1499c-d05af3db7816672e8a8cb4987215dcc3f9a96947.gz
Diffstat (limited to 'Main.hs')
-rw-r--r--Main.hs28
1 files changed, 18 insertions, 10 deletions
diff --git a/Main.hs b/Main.hs
index 44dda60..a94c597 100644
--- a/Main.hs
+++ b/Main.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE FlexibleContexts #-}
-----------------------------------------------------------------------------
-- |
-- Module : Xmobar.Main
@@ -24,6 +25,8 @@ import Parsers
import Config
import XUtil
+import Data.List (intercalate)
+
import Paths_xmobar (version)
import Data.IORef
import Data.Version (showVersion)
@@ -33,6 +36,8 @@ import System.Exit
import System.Environment
import System.Posix.Files
+import Control.Monad.Writer (MonadWriter,MonadIO,unless,runWriterT)
+
-- $main
-- | The main entry point
@@ -41,9 +46,12 @@ main = do
d <- openDisplay ""
args <- getArgs
(o,file) <- getOpts args
- c <- case file of
- [cfgfile] -> readConfig cfgfile
- _ -> readDefaultConfig
+ (c,defaultings) <- runWriterT $ case file of
+ [cfgfile] -> readConfig cfgfile
+ _ -> readDefaultConfig
+
+ unless (null defaultings) $ putStrLn $ "Fields missing from config defaulted: "
+ ++ intercalate "," defaultings
-- listen for ConfigureEvents on the root window, for xrandr support:
rootw <- rootWindow d (defaultScreen d)
@@ -60,18 +68,18 @@ main = do
releaseFont d fs
-- | Reads the configuration files or quits with an error
-readConfig :: FilePath -> IO Config
+readConfig :: (MonadIO m, MonadWriter [String] m) => FilePath -> m Config
readConfig f = do
- file <- fileExist f
- s <- if file then readFileSafe f else error $ f ++ ": file not found!\n" ++ usage
+ file <- io $ fileExist f
+ s <- io $ if file then readFileSafe f else error $ f ++ ": file not found!\n" ++ usage
either (\err -> error $ f ++ ": configuration file contains errors at:\n" ++ show err)
- return $ parseConfig s
+ id $ parseConfig s
-- | Read default configuration file or load the default config
-readDefaultConfig :: IO Config
+readDefaultConfig :: (MonadIO m, MonadWriter [String] m) => m Config
readDefaultConfig = do
- home <- getEnv "HOME"
+ home <- io $ getEnv "HOME"
let path = home ++ "/.xmobarrc"
- f <- fileExist path
+ f <- io $ fileExist path
if f then readConfig path else return defaultConfig
data Opts = Help