haskell / haskell/haskeline

Using Haskeline with a PseudoTerminal

Open
#147 4 comments 1 reaction 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.