aboutsummaryrefslogtreecommitdiffstats
path: root/Dmenu.hs
diff options
context:
space:
mode:
authorDevin Mullins <me@twifkak.com>2007-10-07 20:59:15 +0200
committerDevin Mullins <me@twifkak.com>2007-10-07 20:59:15 +0200
commitd9f831e606e447043239ae4d60e931405132ba37 (patch)
tree0f2c9680d65629c8dcbe80e9125519e30d9405f6 /Dmenu.hs
parent6f391057b024585fb4d9489c3a412a59f4bab275 (diff)
downloadXMonadContrib-d9f831e606e447043239ae4d60e931405132ba37.tar.gz
XMonadContrib-d9f831e606e447043239ae4d60e931405132ba37.tar.xz
XMonadContrib-d9f831e606e447043239ae4d60e931405132ba37.zip
Maybe? What Maybe? (rollback earlier dmenu change)
darcs-hash:20071007185915-78224-5dc94fbbbc960a853654321317e2b8ba54d8be2a.gz
Diffstat (limited to 'Dmenu.hs')
-rw-r--r--Dmenu.hs18
1 files changed, 8 insertions, 10 deletions
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:
-- <http://www.jcreigh.com/dmenu/dmenu-3.2-xinerama.patch>
-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