mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-08-01 04:31:52 -07:00
This should not cause any working configs to stop working, because IO is an instance of MonadIO, and because complete configs will pin down the type of the call to IO. Note that XMonad.Config.Arossato is not a complete config, and so it needed some tweaks; with a main function, this should not be a problem.
57 lines
1.7 KiB
Haskell
57 lines
1.7 KiB
Haskell
-----------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : XMonad.Util.Dmenu
|
|
-- Copyright : (c) Spencer Janssen <spencerjanssen@gmail.com>
|
|
-- License : BSD-style (see LICENSE)
|
|
--
|
|
-- Maintainer : Spencer Janssen <spencerjanssen@gmail.com>
|
|
-- Stability : unstable
|
|
-- Portability : unportable
|
|
--
|
|
-- A convenient binding to dmenu.
|
|
--
|
|
-- Requires the process-1.0 package
|
|
--
|
|
-----------------------------------------------------------------------------
|
|
|
|
module XMonad.Util.Dmenu (
|
|
-- * Usage
|
|
-- $usage
|
|
dmenu, dmenuXinerama, dmenuMap, menu, menuMap
|
|
) where
|
|
|
|
import XMonad
|
|
import qualified XMonad.StackSet as W
|
|
import qualified Data.Map as M
|
|
import XMonad.Util.Run
|
|
|
|
-- $usage
|
|
-- You can use this module with the following in your Config.hs file:
|
|
--
|
|
-- > import XMonad.Util.Dmenu
|
|
|
|
-- %import XMonad.Util.Dmenu
|
|
|
|
-- | Starts dmenu on the current screen. Requires this patch to dmenu:
|
|
-- <http://www.jcreigh.com/dmenu/dmenu-3.2-xinerama.patch>
|
|
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)
|
|
|
|
dmenu :: [String] -> X String
|
|
dmenu opts = menu "dmenu" opts
|
|
|
|
menu :: String -> [String] -> X String
|
|
menu menuCmd opts = runProcessWithInput menuCmd [] (unlines opts)
|
|
|
|
menuMap :: String -> M.Map String a -> X (Maybe a)
|
|
menuMap menuCmd selectionMap = do
|
|
selection <- menuFunction (M.keys selectionMap)
|
|
return $ M.lookup selection selectionMap
|
|
where
|
|
menuFunction = menu menuCmd
|
|
|
|
dmenuMap :: M.Map String a -> X (Maybe a)
|
|
dmenuMap selectionMap = menuMap "dmenu" selectionMap
|