diff options
| -rw-r--r-- | examples/xmobar.hs | 1 | ||||
| -rw-r--r-- | src/Xmobar/App/Compile.hs | 6 | ||||
| -rw-r--r-- | src/Xmobar/App/Main.hs | 20 | 
3 files changed, 16 insertions, 11 deletions
| diff --git a/examples/xmobar.hs b/examples/xmobar.hs index 1325ae7..05c77ca 100644 --- a/examples/xmobar.hs +++ b/examples/xmobar.hs @@ -16,7 +16,6 @@  -- and xmobar will compile and launch it for you and  ------------------------------------------------------------------------------ -  import Xmobar  -- Example user-defined plugin diff --git a/src/Xmobar/App/Compile.hs b/src/Xmobar/App/Compile.hs index 6c136dc..0a763b4 100644 --- a/src/Xmobar/App/Compile.hs +++ b/src/Xmobar/App/Compile.hs @@ -17,7 +17,7 @@  ------------------------------------------------------------------------------ -module Xmobar.App.Compile(recompile, xmessage) where +module Xmobar.App.Compile(recompile, trace, xmessage) where  import Control.Monad.IO.Class  import Control.Monad.Fix (fix) @@ -70,12 +70,12 @@ shouldRecompile verb src bin lib = do    binT <- getModTime bin    if any (binT <) (srcT : libTs)      then do -      trace verb "Xmobar doing recompile because some files have changed." +      trace verb "Xmobar recompiling because some files have changed."        return True      else do        trace verb $ "Xmobar skipping recompile because it is not forced "                     ++ "(e.g. via --recompile), and not any *.hs / *.lhs / *.hsc" -                   ++ "files in lib/ have been changed." +                   ++ " files in lib/ have been changed."        return False    where isSource = flip elem [".hs",".lhs",".hsc"] . takeExtension          allFiles t = do diff --git a/src/Xmobar/App/Main.hs b/src/Xmobar/App/Main.hs index 2291852..3240df9 100644 --- a/src/Xmobar/App/Main.hs +++ b/src/Xmobar/App/Main.hs @@ -28,6 +28,7 @@ import System.Posix.Process (executeFile)  import System.Environment (getArgs)  import System.FilePath  import System.FilePath.Posix (takeBaseName, takeDirectory) +import Text.Parsec.Error (ParseError)  import Graphics.X11.Xlib @@ -40,7 +41,7 @@ import Xmobar.X11.Text  import Xmobar.X11.Window  import Xmobar.App.Opts  import Xmobar.App.EventLoop (startLoop, startCommand) -import Xmobar.App.Compile (recompile) +import Xmobar.App.Compile (recompile, trace)  import Xmobar.App.Config  xmobar :: Config -> IO () @@ -66,12 +67,17 @@ cleanupThreads vars =    for_ (concat vars) $ \(asyncs, _) ->      for_ asyncs cancel -buildLaunch :: Bool -> Bool -> FilePath -> IO () -buildLaunch verb force p = do +buildLaunch :: Bool -> Bool -> FilePath -> ParseError -> IO () +buildLaunch verb force p e = do    let exec = takeBaseName p        dir = takeDirectory p -  recompile dir exec force verb -  executeFile (dir </> exec) False [] Nothing +      ext = takeExtension p +  if ext `elem` [".hs", ".hsc", ".lhs"] +    then recompile dir exec force verb >> +         executeFile (dir </> exec) False [] Nothing +    else trace True ("Invalid configuration file: " ++ show e) >> +         trace True "\n(No compilation attempted: \ +                    \only .hs, .hsc or .lhs files are compiled)"  xmobar' :: [String] -> Config -> IO ()  xmobar' defs cfg = do @@ -93,6 +99,6 @@ xmobarMain = do                  _ -> xmobar defaultConfig      Just p -> do r <- readConfig defaultConfig p                   case r of -                   Left _ -> -                     buildLaunch (verboseFlag flags) (recompileFlag flags) p +                   Left e -> +                     buildLaunch (verboseFlag flags) (recompileFlag flags) p e                     Right (c, defs) -> doOpts c flags >>= xmobar' defs | 
