From d9f831e606e447043239ae4d60e931405132ba37 Mon Sep 17 00:00:00 2001 From: Devin Mullins Date: Sun, 7 Oct 2007 20:59:15 +0200 Subject: Maybe? What Maybe? (rollback earlier dmenu change) darcs-hash:20071007185915-78224-5dc94fbbbc960a853654321317e2b8ba54d8be2a.gz --- Dmenu.hs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) (limited to 'Dmenu.hs') diff --git a/Dmenu.hs b/Dmenu.hs index f2d23fe..cbf2fb7 100644 --- a/Dmenu.hs +++ b/Dmenu.hs @@ -22,7 +22,6 @@ module XMonadContrib.Dmenu ( import XMonad import qualified StackSet as W import qualified Data.Map as M -import System.Exit import System.Process import System.IO import Control.Monad.State @@ -36,7 +35,7 @@ import Control.Monad.State -- | Returns Just output if the command succeeded, and Nothing if it didn't. -- This corresponds to dmenu's notion of exit code 1 for a cancelled invocation. -runProcessWithInput :: FilePath -> [String] -> String -> IO (Maybe String) +runProcessWithInput :: FilePath -> [String] -> String -> IO String runProcessWithInput cmd args input = do (pin, pout, perr, ph) <- runInteractiveProcess cmd args Nothing Nothing hPutStr pin input @@ -45,21 +44,20 @@ runProcessWithInput cmd args input = do when (output==output) $ return () hClose pout hClose perr - exitCode <- waitForProcess ph - case exitCode of - ExitSuccess -> return (Just output) - ExitFailure _ -> return Nothing + waitForProcess ph + return output -- | Starts dmenu on the current screen. Requires this patch to dmenu: -- -dmenuXinerama :: [String] -> X (Maybe String) +dmenuXinerama :: [String] -> X String dmenuXinerama opts = do curscreen <- (fromIntegral . W.screen . W.current) `liftM` gets windowset :: X Int io $ runProcessWithInput "dmenu" ["-xs", show (curscreen+1)] (unlines opts) -dmenu :: [String] -> X (Maybe String) +dmenu :: [String] -> X String dmenu opts = io $ runProcessWithInput "dmenu" [] (unlines opts) dmenuMap :: M.Map String a -> X (Maybe a) -dmenuMap selectionMap = - dmenu (M.keys selectionMap) >>= return . maybe Nothing (flip M.lookup selectionMap) +dmenuMap selectionMap = do + selection <- dmenu (M.keys selectionMap) + return $ M.lookup selection selectionMap -- cgit v1.2.3