summaryrefslogtreecommitdiff
path: root/ghc
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2009-05-28 15:26:51 +0000
committerSimon Marlow <marlowsd@gmail.com>2009-05-28 15:26:51 +0000
commite16df2647fde526846e4c13470250ee5b475bdd2 (patch)
treeafadc42f8da3839b59b54caf36964353528d2834 /ghc
parent7bcf45933a1b386e7f28c0ee7d09d92bad1ee0e7 (diff)
downloadhaskell-e16df2647fde526846e4c13470250ee5b475bdd2.tar.gz
don't call Haskeline to read input when stdin is not a terminal
Diffstat (limited to 'ghc')
-rw-r--r--ghc/InteractiveUI.hs19
1 files changed, 10 insertions, 9 deletions
diff --git a/ghc/InteractiveUI.hs b/ghc/InteractiveUI.hs
index 1fcae52db6..d6202907d1 100644
--- a/ghc/InteractiveUI.hs
+++ b/ghc/InteractiveUI.hs
@@ -420,7 +420,7 @@ runGHCi paths maybe_exprs = do
Nothing ->
do
-- enter the interactive loop
- runGHCiInput $ runCommands $ haskelineLoop show_prompt
+ runGHCiInput $ runCommands $ nextInputLine show_prompt is_tty
Just exprs -> do
-- just evaluate the expression we were given
enqueueCommands exprs
@@ -448,13 +448,14 @@ runGHCiInput f = do
setLogAction
f
--- TODO really bad name
-haskelineLoop :: Bool -> InputT GHCi (Maybe String)
-haskelineLoop show_prompt = do
+nextInputLine :: Bool -> Bool -> InputT GHCi (Maybe String)
+nextInputLine show_prompt is_tty
+ | is_tty = do
prompt <- if show_prompt then lift mkPrompt else return ""
- l <- getInputLine prompt
- return l
-
+ getInputLine prompt
+ | otherwise = do
+ when show_prompt $ lift mkPrompt >>= liftIO . putStr
+ fileLoop stdin
-- NOTE: We only read .ghci files if they are owned by the current user,
-- and aren't world writable. Otherwise, we could be accidentally
@@ -490,7 +491,7 @@ checkPerms name =
fileLoop :: MonadIO m => Handle -> InputT m (Maybe String)
fileLoop hdl = do
- l <- liftIO $ IO.try (BS.hGetLine hdl)
+ l <- liftIO $ IO.try $ hGetLine hdl
case l of
Left e | isEOFError e -> return Nothing
| InvalidArgument <- etype -> return Nothing
@@ -500,7 +501,7 @@ fileLoop hdl = do
-- this can happen if the user closed stdin, or
-- perhaps did getContents which closes stdin at
-- EOF.
- Right l -> fmap Just (Encoding.decode l)
+ Right l -> fmap Just (Encoding.decode (BS.pack l))
mkPrompt :: GHCi String
mkPrompt = do