diff options
-rw-r--r-- | XMonad/Util/Dmenu.hs | 21 |
1 files changed, 17 insertions, 4 deletions
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 |