From eacbec4b7e012eca16b616fae36134a444a8f6a3 Mon Sep 17 00:00:00 2001 From: gwern0 Date: Tue, 5 Feb 2008 04:18:24 +0100 Subject: Run.hs: add an option to runinterms It turns out that for urxvt, and most terminal, apparently, once you give a '-e' option, that's it. They will not interpret anything after that as anything but input for /bin/sh, so if you wanted to go 'runInTerm "'screen -r session' -title IRC"', you were SOL - the -title would not be seen by urxvt. This, needless to say, is bad, since then you can't do stuff like set the title which means various hooks and extensions are helpless. This patch adds an extra options argument which is inserted *before* the -e. If you want the old behaivour, you can just go 'runInTerm "" "executable"', but now if you need to do something extra, 'runInTerm "-title mutt" "mutt"' works fine. This patch also updates callers. darcs-hash:20080205031824-f7719-ca5117c1b75f6667459273be2613bc29e8cbbacb.gz --- XMonad/Prompt/Man.hs | 2 +- XMonad/Prompt/Ssh.hs | 2 +- XMonad/Util/Run.hs | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/XMonad/Prompt/Man.hs b/XMonad/Prompt/Man.hs index 71c7dbd..20e282d 100644 --- a/XMonad/Prompt/Man.hs +++ b/XMonad/Prompt/Man.hs @@ -58,7 +58,7 @@ instance XPrompt Man where manPrompt :: XPConfig -> X () manPrompt c = do mans <- io getMans - mkXPrompt Man c (manCompl mans) $ runInTerm . (++) "man " + mkXPrompt Man c (manCompl mans) $ runInTerm "" . (++) "man " getMans :: IO [String] getMans = do diff --git a/XMonad/Prompt/Ssh.hs b/XMonad/Prompt/Ssh.hs index 47ba168..379de4c 100644 --- a/XMonad/Prompt/Ssh.hs +++ b/XMonad/Prompt/Ssh.hs @@ -56,7 +56,7 @@ sshPrompt c = do mkXPrompt Ssh c (mkComplFunFromList sc) ssh ssh :: String -> X () -ssh s = runInTerm ("ssh " ++ s) +ssh s = runInTerm "" ("ssh " ++ s) sshComplList :: IO [String] sshComplList = uniqSort `fmap` liftM2 (++) sshComplListLocal sshComplListGlobal diff --git a/XMonad/Util/Run.hs b/XMonad/Util/Run.hs index face2d8..1f544f2 100644 --- a/XMonad/Util/Run.hs +++ b/XMonad/Util/Run.hs @@ -56,7 +56,7 @@ runProcessWithInput cmd args input = do hPutStr pin input hClose pin output <- hGetContents pout - when (output==output) $ return () + when (output == output) $ return () hClose pout hClose perr waitForProcess ph @@ -112,11 +112,11 @@ unsafeSpawn = spawn -- | Run a given program in the preferred terminal emulator. This uses -- 'safeSpawn'. -safeRunInTerm :: String -> X () -safeRunInTerm command = asks (terminal . config) >>= \t -> safeSpawn t ("-e " ++ command) +safeRunInTerm :: String -> String -> X () +safeRunInTerm options command = asks (terminal . config) >>= \t -> safeSpawn t (options ++ " -e " ++ command) -unsafeRunInTerm, runInTerm :: String -> X () -unsafeRunInTerm command = asks (terminal . config) >>= \t -> unsafeSpawn $ t ++ " -e " ++ command +unsafeRunInTerm, runInTerm :: String -> String -> X () +unsafeRunInTerm options command = asks (terminal . config) >>= \t -> unsafeSpawn $ t ++ " " ++ options ++ " -e " ++ command runInTerm = unsafeRunInTerm -- | Launch an external application and return a 'Handle' to its standard input. -- cgit v1.2.3