summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Xmobar.hs40
-rw-r--r--src/Xmobar/App/Main.hs56
-rw-r--r--src/Xmobar/Run/Template.hs3
3 files changed, 62 insertions, 37 deletions
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