mirror of
https://github.com/xmonad/xmonad-contrib.git
synced 2025-05-19 11:30:22 -07:00
Be consistent with core utf8-string usage.
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.
This commit is contained in:
parent
067ccb950e
commit
001b38c7ab
@ -62,7 +62,7 @@ instance XPrompt Shell where
|
||||
shellPrompt :: XPConfig -> X ()
|
||||
shellPrompt c = do
|
||||
cmds <- io getCommands
|
||||
mkXPrompt Shell c (getShellCompl cmds) (spawn . encodeString)
|
||||
mkXPrompt Shell c (getShellCompl cmds) spawn
|
||||
|
||||
{- | See safe and unsafeSpawn. prompt is an alias for safePrompt;
|
||||
safePrompt and unsafePrompt work on the same principles, but will use
|
||||
@ -81,9 +81,9 @@ shellPrompt c = do
|
||||
prompt, unsafePrompt, safePrompt :: FilePath -> XPConfig -> X ()
|
||||
prompt = unsafePrompt
|
||||
safePrompt c config = mkXPrompt Shell config (getShellCompl [c]) run
|
||||
where run = safeSpawn c . return . encodeString
|
||||
where run = safeSpawn c . return
|
||||
unsafePrompt c config = mkXPrompt Shell config (getShellCompl [c]) run
|
||||
where run a = unsafeSpawn $ c ++ " " ++ encodeString a
|
||||
where run a = unsafeSpawn $ c ++ " " ++ a
|
||||
|
||||
getShellCompl :: [String] -> String -> IO [String]
|
||||
getShellCompl cmds s | s == "" || last s == ' ' = return []
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user