aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--DirectoryPrompt.hs2
-rw-r--r--Dmenu.hs20
-rw-r--r--Dzen.hs30
-rw-r--r--MetaModule.hs1
-rw-r--r--Run.hs84
-rw-r--r--ShellPrompt.hs2
-rw-r--r--WmiiActions.hs3
-rw-r--r--WorkspaceDir.hs2
8 files changed, 92 insertions, 52 deletions
diff --git a/DirectoryPrompt.hs b/DirectoryPrompt.hs
index b010d4f..a8d58f8 100644
--- a/DirectoryPrompt.hs
+++ b/DirectoryPrompt.hs
@@ -20,7 +20,7 @@ module XMonadContrib.DirectoryPrompt (
import XMonad
import XMonadContrib.XPrompt
-import XMonadContrib.Dmenu ( runProcessWithInput )
+import XMonadContrib.Run ( runProcessWithInput )
-- $usage
-- For an example usage see "XMonadContrib.WorkspaceDir"
diff --git a/Dmenu.hs b/Dmenu.hs
index 1b6d7e6..fd68446 100644
--- a/Dmenu.hs
+++ b/Dmenu.hs
@@ -17,16 +17,14 @@
module XMonadContrib.Dmenu (
-- * Usage
-- $usage
- dmenu, dmenuXinerama, dmenuMap,
- runProcessWithInput
+ dmenu, dmenuXinerama, dmenuMap
) where
import XMonad
import qualified StackSet as W
import qualified Data.Map as M
-import System.Process
-import System.IO
import Control.Monad.State
+import XMonadContrib.Run
-- $usage
-- You can use this module with the following in your Config.hs file:
@@ -35,20 +33,6 @@ import Control.Monad.State
-- %import XMonadContrib.Dmenu
--- | 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 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
-
-- | 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
diff --git a/Dzen.hs b/Dzen.hs
index 12be81c..4e63bfb 100644
--- a/Dzen.hs
+++ b/Dzen.hs
@@ -14,38 +14,10 @@
module XMonadContrib.Dzen (dzen, dzenScreen) where
-import System.Posix.Process (forkProcess, getProcessStatus, createSession)
-import System.IO
-import System.Process
-import System.Exit
-import Control.Concurrent (threadDelay)
import Control.Monad.State
-
import qualified StackSet as W
import XMonad
-
--- wait is in us
-runProcessWithInputAndWait :: FilePath -> [String] -> String -> Int -> IO ()
-runProcessWithInputAndWait cmd args input timeout = do
- pid <- forkProcess $ do
- forkProcess $ do -- double fork it over to init
- createSession
- (pin, pout, perr, ph) <- runInteractiveProcess cmd args Nothing Nothing
- hPutStr pin input
- hFlush pin
- threadDelay timeout
- hClose pin
- -- output <- hGetContents pout
- -- when (output==output) $ return ()
- hClose pout
- hClose perr
- waitForProcess ph
- return ()
- exitWith ExitSuccess
- return ()
- getProcessStatus True False pid
- return ()
-
+import XMonadContrib.Run
curScreen :: X ScreenId
curScreen = (W.screen . W.current) `liftM` gets windowset
diff --git a/MetaModule.hs b/MetaModule.hs
index 1f74884..465e5e0 100644
--- a/MetaModule.hs
+++ b/MetaModule.hs
@@ -60,7 +60,6 @@ import XMonadContrib.ResizableTile ()
import XMonadContrib.Roledex ()
import XMonadContrib.RotSlaves ()
import XMonadContrib.RotView ()
-import XMonadContrib.RunInXTerm ()
import XMonadContrib.SetWMName ()
import XMonadContrib.ShellPrompt ()
import XMonadContrib.SimpleDate ()
diff --git a/Run.hs b/Run.hs
new file mode 100644
index 0000000..051750d
--- /dev/null
+++ b/Run.hs
@@ -0,0 +1,84 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module : XMonadContrib.Run
+-- Copyright : (C) 2007 Spencer Janssen, Andrea Rossato, glasser@mit.edu
+-- License : BSD-style (see LICENSE)
+--
+-- Maintainer : Christian Thiemann <mail@christian-thiemann.de>
+-- Stability : unstable
+-- Portability : unportable
+--
+-- This modules provides several commands to run an external process.
+-- It is composed of functions formerly defined in XMonadContrib.Dmenu (by
+-- Spenver Jannsen), XMonadContrib.Dzen (by glasser@mit.edu) and
+-- XMonadContrib.RunInXTerm (by Andrea Rossato).
+--
+-----------------------------------------------------------------------------
+
+module XMonadContrib.Run (
+ -- * Usage
+ -- $usage
+ runInXTerm,
+ runProcessWithInput,
+ runProcessWithInputAndWait
+ ) where
+
+import XMonad
+import Control.Concurrent (threadDelay)
+import Control.Monad.State
+import System.Environment
+import System.Exit
+import System.IO
+import System.Posix.Process (forkProcess, getProcessStatus, createSession)
+import System.Process
+
+
+-- $usage
+-- For an example usage of runInXTerm see XMonadContrib.SshPrompt
+--
+-- For an example usage of runProcessWithInput see
+-- XMonadContrib.{DirectoryPrompt,Dmenu,ShellPrompt,WmiiActions,WorkspaceDir}
+--
+-- For an example usage of runProcessWithInputAndWait see XMonadContrib.Dzen
+
+-- | 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 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
+
+-- wait is in us
+runProcessWithInputAndWait :: FilePath -> [String] -> String -> Int -> IO ()
+runProcessWithInputAndWait cmd args input timeout = do
+ pid <- forkProcess $ do
+ forkProcess $ do -- double fork it over to init
+ createSession
+ (pin, pout, perr, ph) <- runInteractiveProcess cmd args Nothing Nothing
+ hPutStr pin input
+ hFlush pin
+ threadDelay timeout
+ hClose pin
+ -- output <- hGetContents pout
+ -- when (output==output) $ return ()
+ hClose pout
+ hClose perr
+ waitForProcess ph
+ return ()
+ exitWith ExitSuccess
+ return ()
+ getProcessStatus True False pid
+ return ()
+
+runInXTerm :: String -> X ()
+runInXTerm com = do
+ c <- io $ catch (getEnv "XTERMCMD") (const $ return "xterm")
+ spawn ("exec " ++ c ++ " -e " ++ com)
+
diff --git a/ShellPrompt.hs b/ShellPrompt.hs
index 5dfb445..03d1f6e 100644
--- a/ShellPrompt.hs
+++ b/ShellPrompt.hs
@@ -22,7 +22,7 @@ module XMonadContrib.ShellPrompt (
import XMonad
import XMonadContrib.XPrompt
-import XMonadContrib.Dmenu
+import XMonadContrib.Run
import Control.Monad
import Data.List
diff --git a/WmiiActions.hs b/WmiiActions.hs
index 85c0f73..2a82791 100644
--- a/WmiiActions.hs
+++ b/WmiiActions.hs
@@ -26,7 +26,8 @@ module XMonadContrib.WmiiActions (
) where
import XMonad
-import XMonadContrib.Dmenu (dmenu, dmenuXinerama, runProcessWithInput)
+import XMonadContrib.Dmenu (dmenu, dmenuXinerama)
+import XMonadContrib.Run (runProcessWithInput)
import Control.Monad (filterM, liftM, liftM2)
import System.Directory (getDirectoryContents, doesFileExist, getPermissions, executable)
diff --git a/WorkspaceDir.hs b/WorkspaceDir.hs
index 649365d..869e1d4 100644
--- a/WorkspaceDir.hs
+++ b/WorkspaceDir.hs
@@ -33,7 +33,7 @@ import System.Directory ( setCurrentDirectory )
import XMonad
import Operations ( sendMessage )
-import XMonadContrib.Dmenu ( runProcessWithInput )
+import XMonadContrib.Run ( runProcessWithInput )
import XMonadContrib.XPrompt ( XPConfig )
import XMonadContrib.DirectoryPrompt ( directoryPrompt )
import XMonadContrib.LayoutModifier