From af5971bb82e71409b02ebe8bffeec2707b6bbf4b Mon Sep 17 00:00:00 2001 From: Anders Engstrom Date: Mon, 8 Mar 2010 12:50:22 +0100 Subject: X.U.Dmenu helpers to run dmenu with arguments Ignore-this: 7d582e06d0e393c717f43e0729306fbf darcs-hash:20100308115022-8978f-f1584a0f90a4d7f4620e4d45052bb2f8ac33f022.gz --- XMonad/Util/Dmenu.hs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'XMonad/Util') diff --git a/XMonad/Util/Dmenu.hs b/XMonad/Util/Dmenu.hs index 162e644..17c09e3 100644 --- a/XMonad/Util/Dmenu.hs +++ b/XMonad/Util/Dmenu.hs @@ -17,7 +17,7 @@ module XMonad.Util.Dmenu ( -- * Usage -- $usage - dmenu, dmenuXinerama, dmenuMap, menu, menuMap + dmenu, dmenuXinerama, dmenuMap, menu, menuArgs, menuMap, menuMapArgs ) where import XMonad @@ -38,19 +38,32 @@ dmenuXinerama :: [String] -> X String dmenuXinerama opts = do curscreen <- (fromIntegral . W.screen . W.current) `fmap` gets windowset :: X Int runProcessWithInput "dmenu" ["-xs", show (curscreen+1)] (unlines opts) + menuArgs "dmenu" ["-xs", show (curscreen+1)] opts +-- | Run dmenu to select an option from a list. dmenu :: [String] -> X String dmenu opts = menu "dmenu" opts +-- | like 'dmenu' but also takes the command to run. menu :: String -> [String] -> X String -menu menuCmd opts = runProcessWithInput menuCmd [] (unlines opts) +menu menuCmd opts = menuArgs menuCmd [] opts +-- | Like 'menu' but also takes a list of command line arguments. +menuArgs :: String -> [String] -> [String] -> X String +menuArgs menuCmd args opts = runProcessWithInput menuCmd args (unlines opts) + +-- | Like 'dmenuMap' but also takes the command to run. menuMap :: String -> M.Map String a -> X (Maybe a) -menuMap menuCmd selectionMap = do +menuMap menuCmd selectionMap = menuMapArgs menuCmd [] selectionMap + +-- | Like 'menuMap' but also takes a list of command line arguments. +menuMapArgs :: String -> [String] -> M.Map String a -> X (Maybe a) +menuMapArgs menuCmd args selectionMap = do selection <- menuFunction (M.keys selectionMap) return $ M.lookup selection selectionMap where - menuFunction = menu menuCmd + menuFunction = menuArgs menuCmd args +-- | Run dmenu to select an entry from a map based on the key. dmenuMap :: M.Map String a -> X (Maybe a) dmenuMap selectionMap = menuMap "dmenu" selectionMap -- cgit v1.2.3