I'd like to use haskeline for a browser-based terminal interface.
(See smos.online.)
I got something hacky working like this:
-- TODO try to use the special TTY handles instead so history works too.
customRunInputT :: InputT IO a -> IO a
customRunInputT inputT = do
historyRef <- newIORef Haskeline.emptyHistory
withBehavior (useFileHandle inputH) $ \rt -> do
let runTerm =
rt
{ putStrOut = \s -> do
hPutStr outputH s
hFlush outputH
}
runReaderT
( runReaderT
( Haskeline.runKillRing
( runReaderT
( runReaderT (unInputT inputT) runTerm
)
historyRef
)
)
Haskeline.defaultPrefs
)
Haskeline.defaultSettings
However, pressing the up arrow key doesn't show me the history but a control sequence instead.
I've also tried to write this:
givenTtyHandles :: Handle -> Handle -> MaybeT IO Handles
givenTtyHandles inh outh = do
outEH <- inCodingMode outh
return Handles
{ hIn = externalHandle inh
, hOut = outEH
, closeHandles = pure () -- Don't close them
}
and then the history works but the input is no longer echoed, even with hSetExcho inh and hSetBuffering inh NoBuffering.
Is this a use-case that you would like to support?
I'd like to use
haskelinefor a browser-based terminal interface.(See
smos.online.)I got something hacky working like this:
However, pressing the up arrow key doesn't show me the history but a control sequence instead.
I've also tried to write this:
and then the history works but the input is no longer echoed, even with
hSetExcho inhandhSetBuffering inh NoBuffering.Is this a use-case that you would like to support?