From 108200581a0d3b898254bf278f959178587bd856 Mon Sep 17 00:00:00 2001 From: jao Date: Sat, 8 Dec 2018 03:15:55 +0000 Subject: Compiling only .[l]hs[c] files Should take care of issue #371 --- examples/xmobar.hs | 1 - src/Xmobar/App/Compile.hs | 6 +++--- 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 -- cgit v1.2.3