diff options
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) + |