diff options
author | Spencer Janssen <sjanssen@cse.unl.edu> | 2007-05-03 07:22:25 +0200 |
---|---|---|
committer | Spencer Janssen <sjanssen@cse.unl.edu> | 2007-05-03 07:22:25 +0200 |
commit | 20c6e84f230b39d108743cf7d506355dc9a08f93 (patch) | |
tree | 75621f26abfe9c00ddcff22a0005ea6cfbe98730 /Dmenu.hs | |
parent | cfdc6283ea7f8a16c790de329fdaf78639ccb474 (diff) | |
download | XMonadContrib-20c6e84f230b39d108743cf7d506355dc9a08f93.tar.gz XMonadContrib-20c6e84f230b39d108743cf7d506355dc9a08f93.tar.xz XMonadContrib-20c6e84f230b39d108743cf7d506355dc9a08f93.zip |
Add dmenu (thanks jcreigh)
darcs-hash:20070503052225-a5988-33b54ede05b668047f7f42452ea6f3c820732489.gz
Diffstat (limited to 'Dmenu.hs')
-rw-r--r-- | Dmenu.hs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/Dmenu.hs b/Dmenu.hs new file mode 100644 index 0000000..b3434ce --- /dev/null +++ b/Dmenu.hs @@ -0,0 +1,32 @@ +module XMonadContrib.Dmenu (dmenu, dmenuXinerama, runProcessWithInput) where + +import XMonad +import qualified StackSet as W +import System.Process +import System.IO +import Control.Monad +import Control.Monad.State +import Data.Maybe +import qualified Data.Map as M + +runProcessWithInput :: FilePath -> [String] -> String -> IO String +runProcessWithInput cmd args input = do + (pin, pout, perr, ph) <- runInteractiveProcess cmd args Nothing Nothing + hPutStr pin input + hClose pin + output <- hGetContents pout + when (output==output) $ return () + hClose pout + hClose perr + waitForProcess ph + return output + +dmenuXinerama :: [String] -> X String +dmenuXinerama opts = do + ws <- gets workspace + let curscreen = fromIntegral $ fromMaybe 0 (M.lookup (W.current ws) (W.ws2screen ws)) :: Int + io $ runProcessWithInput "dmenu" ["-xs", show (curscreen+1)] (unlines opts) + +dmenu :: [String] -> IO String +dmenu opts = runProcessWithInput "dmenu" [] (unlines opts) + |