;run: more robust terminal check

This commit is contained in:
Dmitry Astapov 2025-03-05 22:00:31 +00:00 committed by Simon Michael
parent e4cfd31544
commit df0cd78b26

View File

@ -35,7 +35,7 @@ import Control.Monad.Extra (concatMapM)
import System.Exit (ExitCode) import System.Exit (ExitCode)
import System.Console.CmdArgs.Explicit (expandArgsAt) import System.Console.CmdArgs.Explicit (expandArgsAt)
import System.Directory (doesFileExist) import System.Directory (doesFileExist)
import System.IO (stdin, hIsTerminalDevice) import System.IO (stdin, hIsTerminalDevice, hIsOpen)
import System.IO.Unsafe (unsafePerformIO) import System.IO.Unsafe (unsafePerformIO)
import System.Console.Haskeline import System.Console.Haskeline
@ -80,7 +80,7 @@ run :: Maybe DefaultRunJournal -> (String -> Maybe (Mode RawOpts, CliOpts -> Jou
run defaultJournalOverride findBuiltinCommand cliopts@CliOpts{rawopts_=rawopts} = do run defaultJournalOverride findBuiltinCommand cliopts@CliOpts{rawopts_=rawopts} = do
withJournalCached defaultJournalOverride cliopts $ \(_,key) -> do withJournalCached defaultJournalOverride cliopts $ \(_,key) -> do
let args = dbg1 "args" $ listofstringopt "args" rawopts let args = dbg1 "args" $ listofstringopt "args" rawopts
isTerminal <- hIsTerminalDevice stdin isTerminal <- isStdinTerminal
if args == [] && not isTerminal if args == [] && not isTerminal
then runREPL key findBuiltinCommand then runREPL key findBuiltinCommand
else do else do
@ -146,7 +146,7 @@ runCommand defaultJournalOverride findBuiltinCommand cmdline = do
-- | Run an interactive REPL. -- | Run an interactive REPL.
runREPL :: DefaultRunJournal -> (String -> Maybe (Mode RawOpts, CliOpts -> Journal -> IO ())) -> IO () runREPL :: DefaultRunJournal -> (String -> Maybe (Mode RawOpts, CliOpts -> Journal -> IO ())) -> IO ()
runREPL defaultJournalOverride findBuiltinCommand = do runREPL defaultJournalOverride findBuiltinCommand = do
isTerminal <- hIsTerminalDevice stdin isTerminal <- isStdinTerminal
if not isTerminal if not isTerminal
then runInputT defaultSettings (loop "") then runInputT defaultSettings (loop "")
else do else do
@ -169,6 +169,10 @@ runREPL defaultJournalOverride findBuiltinCommand = do
] ]
loop prompt loop prompt
isStdinTerminal = do
op <- hIsOpen stdin
if op then hIsTerminalDevice stdin else return False
-- | Cache of all journals that have been read by commands given to "run", -- | Cache of all journals that have been read by commands given to "run",
-- keyed by the fully-expanded filename. -- keyed by the fully-expanded filename.
journalCache :: MVar (Map.Map (InputOpts,PrefixedFilePath) Journal) journalCache :: MVar (Map.Map (InputOpts,PrefixedFilePath) Journal)