From 1187eaf3b7e63523b7ad9bd287038baef3bedfa9 Mon Sep 17 00:00:00 2001 From: Adam Vogt Date: Fri, 18 Nov 2011 19:47:45 +0100 Subject: Be consistent with core utf8-string usage. Ignore-this: 9de0599d0fb888c58e11598d4de9599e Now that spawn assumes executeFile takes a String containing utf8 codepoints (and takes an actual String as input) adjust Prompt.Shell to avoid double encoding. U.Run functions are updated to be consistent with spawn. darcs-hash:20111118184745-1499c-0f5bee188cc9540d2747db1adbf87619011a5443.gz --- XMonad/Util/Run.hs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'XMonad/Util/Run.hs') diff --git a/XMonad/Util/Run.hs b/XMonad/Util/Run.hs index 4b766d8..34c9b5e 100644 --- a/XMonad/Util/Run.hs +++ b/XMonad/Util/Run.hs @@ -31,6 +31,7 @@ module XMonad.Util.Run ( hPutStr, hPutStrLn -- re-export for convenience ) where +import Codec.Binary.UTF8.String import System.Posix.IO import System.Posix.Process (createSession, executeFile, forkProcess) import Control.Concurrent (threadDelay) @@ -53,7 +54,8 @@ import Control.Monad -- | Returns the output. runProcessWithInput :: MonadIO m => FilePath -> [String] -> String -> m String runProcessWithInput cmd args input = io $ do - (pin, pout, perr, _) <- runInteractiveProcess cmd args Nothing Nothing + (pin, pout, perr, _) <- runInteractiveProcess (encodeString cmd) + (map encodeString args) Nothing Nothing hPutStr pin input hClose pin output <- hGetContents pout @@ -67,7 +69,8 @@ runProcessWithInput cmd args input = io $ do runProcessWithInputAndWait :: MonadIO m => FilePath -> [String] -> String -> Int -> m () runProcessWithInputAndWait cmd args input timeout = io $ do _ <- xfork $ do - (pin, pout, perr, _) <- runInteractiveProcess cmd args Nothing Nothing + (pin, pout, perr, _) <- runInteractiveProcess (encodeString cmd) + (map encodeString args) Nothing Nothing hPutStr pin input hFlush pin threadDelay timeout @@ -108,7 +111,7 @@ safeSpawn :: MonadIO m => FilePath -> [String] -> m () safeSpawn prog args = io $ void_ $ forkProcess $ do uninstallSignalHandlers _ <- createSession - executeFile prog True args Nothing + executeFile (encodeString prog) True (map encodeString args) Nothing where void_ = (>> return ()) -- TODO: replace with Control.Monad.void / void not in ghc6 apparently -- | Simplified 'safeSpawn'; only takes a program (and no arguments): @@ -141,6 +144,6 @@ spawnPipe x = io $ do hSetBuffering h LineBuffering _ <- xfork $ do _ <- dupTo rd stdInput - executeFile "/bin/sh" False ["-c", x] Nothing + executeFile "/bin/sh" False ["-c", encodeString x] Nothing closeFd rd return h -- cgit v1.2.3