aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Thiemann <mail@christian-thiemann.de>2007-10-12 16:52:33 +0200
committerChristian Thiemann <mail@christian-thiemann.de>2007-10-12 16:52:33 +0200
commitc5f7a0ab918ee2e4296263b447157ea3bfcf180e (patch)
tree6fedead21ca002adbdf4eec36509bc8baf4b16b6
parentc3d8c3ed79f56ed5b7b57684b6d2c9e40b9e0f57 (diff)
downloadXMonadContrib-c5f7a0ab918ee2e4296263b447157ea3bfcf180e.tar.gz
XMonadContrib-c5f7a0ab918ee2e4296263b447157ea3bfcf180e.tar.xz
XMonadContrib-c5f7a0ab918ee2e4296263b447157ea3bfcf180e.zip
Move runXXX functions to one module
This patch takes runProcessWithInput out of Dmenu, runProcessWithInputAndWait out of Dzen, and runInXTerm out of RunInXTerm and collects them in one central module called Run. This way, other modules may include Run instead of Dmenu to get what they want without giving the impression of making use of dmenu. darcs-hash:20071012145233-8602e-6f8fb66c62afecdbd52a6a9122b5ecb55fc7f8bc.gz
-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