aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcwills.dev <cwills.dev@gmail.com>2014-02-02 15:34:15 +0100
committercwills.dev <cwills.dev@gmail.com>2014-02-02 15:34:15 +0100
commit250979fe219ac2a858b3981bde2a203f3e26fc6c (patch)
treeb2b5a82124dbfe86410873322e0e135fdf54ab0d
parent8ea5be74efd159a31b82c10e55e36547b64c71ac (diff)
downloadXMonadContrib-250979fe219ac2a858b3981bde2a203f3e26fc6c.tar.gz
XMonadContrib-250979fe219ac2a858b3981bde2a203f3e26fc6c.tar.xz
XMonadContrib-250979fe219ac2a858b3981bde2a203f3e26fc6c.zip
Added SpawnNamedPipe
Ignore-this: 87797ffffc8d0fd088482bd0c5baf0e darcs-hash:20140202143415-3cb8c-2c4563a42fe033527662ff7f7aeb175f8a110b63.gz
-rw-r--r--XMonad/Util/SpawnNamedPipe.hs42
-rw-r--r--xmonad-contrib.cabal1
2 files changed, 43 insertions, 0 deletions
diff --git a/XMonad/Util/SpawnNamedPipe.hs b/XMonad/Util/SpawnNamedPipe.hs
new file mode 100644
index 0000000..f1477ce
--- /dev/null
+++ b/XMonad/Util/SpawnNamedPipe.hs
@@ -0,0 +1,42 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+
+-----------------------------------------------------------------------------
+-- |
+-- Module : XMonad.Util.SpawnNamedPipe
+-- Copyright : (c) Christian Wills 2014
+-- License : BSD3-style (see LICENSE)
+--
+-- Maintainer : cwills.dev@gmail.com
+-- Stability : unstable
+-- Portability : not portable
+--
+-- A module for spawning a pipe whose handle lives in the Xmonad state. This
+-- makes is possible to start dzen in the startup hook and pipe stuff to it in
+-- the logHook cleanly.
+--
+-----------------------------------------------------------------------------
+
+module XMonad.Util.SpawnNamedPipe (spawnNamedPipe, getNamedPipeHandle) where
+
+import XMonad
+import XMonad.Util.Run
+import System.IO
+import qualified XMonad.Util.ExtensibleState as XS
+import Control.Monad
+import qualified Data.Map.Strict as Map
+
+data NamedPipes = NamedPipes { pipeMap :: (Map.Map String Handle) }
+ deriving (Show, Typeable)
+
+instance ExtensionClass NamedPipes where
+ initialValue = NamedPipes Map.empty
+
+spawnNamedPipe :: String -> String -> X ()
+spawnNamedPipe cmd name = do
+ b <- XS.gets (Map.member name . pipeMap)
+ when (not b) $ do
+ h <- spawnPipe cmd
+ XS.modify (NamedPipes . Map.insert name h . pipeMap)
+
+getNamedPipeHandle :: String -> X (Maybe Handle)
+getNamedPipeHandle name = XS.gets (Map.lookup name . pipeMap)
diff --git a/xmonad-contrib.cabal b/xmonad-contrib.cabal
index 0ad136a..95f6f64 100644
--- a/xmonad-contrib.cabal
+++ b/xmonad-contrib.cabal
@@ -310,6 +310,7 @@ library
XMonad.Util.Run
XMonad.Util.Scratchpad
XMonad.Util.SpawnOnce
+ XMonad.Util.SpawnNamedPipe
XMonad.Util.Stack
XMonad.Util.StringProp
XMonad.Util.Themes