mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 11:30:22 -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