From 250979fe219ac2a858b3981bde2a203f3e26fc6c Mon Sep 17 00:00:00 2001 From: "cwills.dev" Date: Sun, 2 Feb 2014 15:34:15 +0100 Subject: Added SpawnNamedPipe Ignore-this: 87797ffffc8d0fd088482bd0c5baf0e darcs-hash:20140202143415-3cb8c-2c4563a42fe033527662ff7f7aeb175f8a110b63.gz --- XMonad/Util/SpawnNamedPipe.hs | 42 ++++++++++++++++++++++++++++++++++++++++++ xmonad-contrib.cabal | 1 + 2 files changed, 43 insertions(+) create mode 100644 XMonad/Util/SpawnNamedPipe.hs 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 -- cgit v1.2.3