;run: more robust terminal check
This commit is contained in:
parent
e4cfd31544
commit
df0cd78b26
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user