From 3c0b22f9799a4c607df473ebc77d82dd218527de Mon Sep 17 00:00:00 2001 From: glasser Date: Wed, 23 May 2007 20:43:15 +0200 Subject: dzen module (with xinerama support, which requires glasser's Xinerama patch to dzen) darcs-hash:20070523184315-64353-2f7d112bfab370c3b02397317a8dbe8686bc10be.gz --- Dzen.hs | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Dzen.hs (limited to 'Dzen.hs') diff --git a/Dzen.hs b/Dzen.hs new file mode 100644 index 0000000..0994396 --- /dev/null +++ b/Dzen.hs @@ -0,0 +1,49 @@ +module XMonadContrib.Dzen (dzen, dzenScreen) where + +import System.Posix.Process (forkProcess, getProcessStatus, createSession) +import System.IO +import System.Process +import System.Exit +import Control.Concurrent (threadDelay) +import Control.Monad.State + +import qualified StackSet as W +import XMonad + +-- wait is in us +runProcessWithInputAndWait :: FilePath -> [String] -> String -> Int -> IO () +runProcessWithInputAndWait cmd args input timeout = do + pid <- forkProcess $ do + forkProcess $ do -- double fork it over to init + createSession + (pin, pout, perr, ph) <- runInteractiveProcess cmd args Nothing Nothing + hPutStr pin input + hFlush pin + threadDelay timeout + hClose pin + -- output <- hGetContents pout + -- when (output==output) $ return () + hClose pout + hClose perr + waitForProcess ph + return () + exitWith ExitSuccess + return () + getProcessStatus True False pid + return () + + +curScreen :: X ScreenId +curScreen = (W.screen . W.current) `liftM` gets windowset + +toXineramaArg :: ScreenId -> String +toXineramaArg n = show ( ((fromIntegral n)+1)::Int ) + +-- requires glasser's xinerama patch to dzen + +dzen :: String -> X () +dzen str = curScreen >>= \sc -> dzenScreen sc str + +dzenScreen :: ScreenId -> String -> X() +dzenScreen sc str = io $ (runProcessWithInputAndWait "dzen2" ["-xs", screen] str 5000000) + where screen = toXineramaArg sc -- cgit v1.2.3