From 20c6e84f230b39d108743cf7d506355dc9a08f93 Mon Sep 17 00:00:00 2001 From: Spencer Janssen Date: Thu, 3 May 2007 07:22:25 +0200 Subject: Add dmenu (thanks jcreigh) darcs-hash:20070503052225-a5988-33b54ede05b668047f7f42452ea6f3c820732489.gz --- Dmenu.hs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Dmenu.hs (limited to 'Dmenu.hs') 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) + -- cgit v1.2.3