Using Haskeline with a PseudoTerminal
- Dominant language
- Haskell
- Stars
- 247
- Forks
- 82
- PR merge metrics
- No merged PRs in 30d
Description
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?
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.