From dba5bb8d946deca0872a17d98e3f1753c2160163 Mon Sep 17 00:00:00 2001
From: jao <jao@gnu.org>
Date: Sun, 25 Nov 2018 22:24:39 +0000
Subject: Xmobar.App.Main

---
 src/Xmobar.hs              | 40 ++++-----------------------------
 src/Xmobar/App/Main.hs     | 56 ++++++++++++++++++++++++++++++++++++++++++++++
 src/Xmobar/Run/Template.hs |  3 ++-
 xmobar.cabal               |  9 ++++----
 4 files changed, 67 insertions(+), 41 deletions(-)
 create mode 100644 src/Xmobar/App/Main.hs

diff --git a/src/Xmobar.hs b/src/Xmobar.hs
index be20dbe..2b15835 100644
--- a/src/Xmobar.hs
+++ b/src/Xmobar.hs
@@ -17,6 +17,7 @@
 
 module Xmobar (xmobar
               , Runnable (..)
+              , Exec (..)
               , module Xmobar.Config
               , module Xmobar.Plugins.BufferedPipeReader
               , module Xmobar.Plugins.CommandReader
@@ -37,20 +38,9 @@ module Xmobar (xmobar
               , module Xmobar.Plugins.XMonadLog
               ) where
 
-import Data.Foldable (for_)
-import qualified Data.Map as Map
-
-import Graphics.X11.Xlib
-import Control.Concurrent.Async (Async, cancel)
-import Control.Exception (bracket)
-
-import Xmobar.Config
 import Xmobar.Run.Runnable
-import Xmobar.Run.Template
-import Xmobar.System.Signal (setupSignalHandler, withDeferSignals)
-import Xmobar.X11.Types
-import Xmobar.X11.XUtil
-import Xmobar.X11.Window
+import Xmobar.Run.Commands
+import Xmobar.Config
 import Xmobar.Plugins.BufferedPipeReader
 import Xmobar.Plugins.CommandReader
 import Xmobar.Plugins.Date
@@ -68,27 +58,5 @@ import Xmobar.Plugins.Monitors
 import Xmobar.Plugins.PipeReader
 import Xmobar.Plugins.StdinReader
 import Xmobar.Plugins.XMonadLog
-import Xmobar.App.EventLoop (startLoop, startCommand)
-
-xmobar :: Config -> IO ()
-xmobar conf = withDeferSignals $ do
-  initThreads
-  d <- openDisplay ""
-  fs    <- initFont d (font conf)
-  fl    <- mapM (initFont d) (additionalFonts conf)
-  cls   <- mapM (parseTemplate (commands conf) (sepChar conf))
-                (splitTemplate (alignSep conf) (template conf))
-  sig   <- setupSignalHandler
-  bracket (mapM (mapM $ startCommand sig) cls)
-          cleanupThreads
-          $ \vars -> do
-    (r,w) <- createWin d fs conf
-    let ic = Map.empty
-        to = textOffset conf
-        ts = textOffsets conf ++ replicate (length fl) (-1)
-    startLoop (XConf d r w (fs:fl) (to:ts) ic conf) sig vars
 
-cleanupThreads :: [[([Async ()], a)]] -> IO ()
-cleanupThreads vars =
-  for_ (concat vars) $ \(asyncs, _) ->
-    for_ asyncs cancel
+import Xmobar.App.Main (xmobar)
diff --git a/src/Xmobar/App/Main.hs b/src/Xmobar/App/Main.hs
new file mode 100644
index 0000000..329a4b5
--- /dev/null
+++ b/src/Xmobar/App/Main.hs
@@ -0,0 +1,56 @@
+------------------------------------------------------------------------------
+-- |
+-- Module: Xmobar.App.Main
+-- Copyright: (c) 2018 Jose Antonio Ortega Ruiz
+-- License: BSD3-style (see LICENSE)
+--
+-- Maintainer: jao@gnu.org
+-- Stability: unstable
+-- Portability: portable
+-- Created: Sun Nov 25, 2018 21:53
+--
+--
+-- Support for creating executable main functions
+--
+------------------------------------------------------------------------------
+
+
+module Xmobar.App.Main (xmobar) where
+
+import Data.Foldable (for_)
+import qualified Data.Map as Map
+
+import Graphics.X11.Xlib
+import Control.Concurrent.Async (Async, cancel)
+import Control.Exception (bracket)
+
+import Xmobar.Config
+import Xmobar.System.Signal (setupSignalHandler, withDeferSignals)
+import Xmobar.Run.Template
+import Xmobar.X11.Types
+import Xmobar.X11.XUtil
+import Xmobar.X11.Window
+import Xmobar.App.EventLoop (startLoop, startCommand)
+
+xmobar :: Config -> IO ()
+xmobar conf = withDeferSignals $ do
+  initThreads
+  d <- openDisplay ""
+  fs    <- initFont d (font conf)
+  fl    <- mapM (initFont d) (additionalFonts conf)
+  cls   <- mapM (parseTemplate (commands conf) (sepChar conf))
+                (splitTemplate (alignSep conf) (template conf))
+  sig   <- setupSignalHandler
+  bracket (mapM (mapM $ startCommand sig) cls)
+          cleanupThreads
+          $ \vars -> do
+    (r,w) <- createWin d fs conf
+    let ic = Map.empty
+        to = textOffset conf
+        ts = textOffsets conf ++ replicate (length fl) (-1)
+    startLoop (XConf d r w (fs:fl) (to:ts) ic conf) sig vars
+
+cleanupThreads :: [[([Async ()], a)]] -> IO ()
+cleanupThreads vars =
+  for_ (concat vars) $ \(asyncs, _) ->
+    for_ asyncs cancel
diff --git a/src/Xmobar/Run/Template.hs b/src/Xmobar/Run/Template.hs
index a544724..5b1e2f2 100644
--- a/src/Xmobar/Run/Template.hs
+++ b/src/Xmobar/Run/Template.hs
@@ -46,7 +46,8 @@ templateCommandParser sepChar =
 templateParser :: String -> Parser [(String,String,String)]
 templateParser s = many $ templateStringParser s
 
--- | Actually runs the template parsers
+-- | Actually runs the template parsers over a (segment of) a template
+-- string, returning a list of runnables with their prefix and suffix.
 parseTemplate :: [Runnable] -> String -> String -> IO [(Runnable,String,String)]
 parseTemplate c sepChar s =
     do str <- case parse (templateParser sepChar) "" s of
diff --git a/xmobar.cabal b/xmobar.cabal
index ca19863..69f8f4d 100644
--- a/xmobar.cabal
+++ b/xmobar.cabal
@@ -95,20 +95,21 @@ library
     hs-source-dirs:  src
 
     exposed-modules: Xmobar,
-                     Xmobar.Config,
-                     Xmobar.Actions,
-                     Xmobar.Run.Commands,
-                     Xmobar.Run.Runnable
+                     Xmobar.Config
 
     other-modules: Xmobar.Utils,
                    Xmobar.Run.Types,
                    Xmobar.Run.Template,
+                   Xmobar.Run.Commands,
+                   Xmobar.Run.Runnable
                    Xmobar.App.EventLoop,
+                   Xmobar.App.Main,
                    Xmobar.System.StatFS,
                    Xmobar.System.Environment,
                    Xmobar.System.Localize,
                    Xmobar.System.Signal,
                    Xmobar.System.Kbd,
+                   Xmobar.X11.Actions,
                    Xmobar.X11.Parsers,
                    Xmobar.X11.Types,
                    Xmobar.X11.XUtil,
-- 
cgit v1.2.3