aboutsummaryrefslogtreecommitdiffstats
path: root/Dmenu.hs
diff options
context:
space:
mode:
authorSpencer Janssen <sjanssen@cse.unl.edu>2007-05-03 07:22:25 +0200
committerSpencer Janssen <sjanssen@cse.unl.edu>2007-05-03 07:22:25 +0200
commit20c6e84f230b39d108743cf7d506355dc9a08f93 (patch)
tree75621f26abfe9c00ddcff22a0005ea6cfbe98730 /Dmenu.hs
parentcfdc6283ea7f8a16c790de329fdaf78639ccb474 (diff)
downloadXMonadContrib-20c6e84f230b39d108743cf7d506355dc9a08f93.tar.gz
XMonadContrib-20c6e84f230b39d108743cf7d506355dc9a08f93.tar.xz
XMonadContrib-20c6e84f230b39d108743cf7d506355dc9a08f93.zip
Add dmenu (thanks jcreigh)
darcs-hash:20070503052225-a5988-33b54ede05b668047f7f42452ea6f3c820732489.gz
Diffstat (limited to 'Dmenu.hs')
-rw-r--r--Dmenu.hs32
1 files changed, 32 insertions, 0 deletions
diff --git a/Dmenu.hs b/Dmenu.hs
new file mode 100644
index 0000000..b3434ce
--- /dev/null
+++ b/Dmenu.hs
@@ -0,0 +1,32 @@
+module XMonadContrib.Dmenu (dmenu, dmenuXinerama, runProcessWithInput) where
+
+import XMonad
+import qualified StackSet as W
+import System.Process
+import System.IO
+import Control.Monad
+import Control.Monad.State
+import Data.Maybe
+import qualified Data.Map as M
+
+runProcessWithInput :: FilePath -> [String] -> String -> IO String
+runProcessWithInput cmd args input = do
+ (pin, pout, perr, ph) <- runInteractiveProcess cmd args Nothing Nothing
+ hPutStr pin input
+ hClose pin
+ output <- hGetContents pout
+ when (output==output) $ return ()
+ hClose pout
+ hClose perr
+ waitForProcess ph
+ return output
+
+dmenuXinerama :: [String] -> X String
+dmenuXinerama opts = do
+ ws <- gets workspace
+ let curscreen = fromIntegral $ fromMaybe 0 (M.lookup (W.current ws) (W.ws2screen ws)) :: Int
+ io $ runProcessWithInput "dmenu" ["-xs", show (curscreen+1)] (unlines opts)
+
+dmenu :: [String] -> IO String
+dmenu opts = runProcessWithInput "dmenu" [] (unlines opts)
+