mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 03:20:21 -07:00
dzen module (with xinerama support, which requires glasser's Xinerama patch to dzen)
This commit is contained in:
parent
aeee485def
commit
a1b8a3ba79
49
Dzen.hs
Normal file
49
Dzen.hs
Normal file
@ -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
|
Loading…
x
Reference in New Issue
Block a user