diff options
Diffstat (limited to '')
-rw-r--r-- | DirectoryPrompt.hs | 2 | ||||
-rw-r--r-- | Dmenu.hs | 20 | ||||
-rw-r--r-- | Dzen.hs | 30 | ||||
-rw-r--r-- | MetaModule.hs | 1 | ||||
-rw-r--r-- | Run.hs | 84 | ||||
-rw-r--r-- | ShellPrompt.hs | 2 | ||||
-rw-r--r-- | WmiiActions.hs | 3 | ||||
-rw-r--r-- | WorkspaceDir.hs | 2 |
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" @@ -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 @@ -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 () @@ -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 |