diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-05-28 15:26:51 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-05-28 15:26:51 +0000 |
commit | e16df2647fde526846e4c13470250ee5b475bdd2 (patch) | |
tree | afadc42f8da3839b59b54caf36964353528d2834 /ghc | |
parent | 7bcf45933a1b386e7f28c0ee7d09d92bad1ee0e7 (diff) | |
download | haskell-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.hs | 19 |
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 |