Haskell终端输入中的可编辑默认字符串



我希望能够提示用户输入(比如FilePath(,但也希望提供一个可变/交互式字符串作为默认值,所以我可以用提示,而不是让用户键入完整路径

C:UsersJohnprojecttest

并让他们能够退格4次并输入final以产生C:UsersJohnprojectfinal,而不是键入整个路径。

但是,使用putStrSystem.IO.hPutStr stdout打印默认字符串时,会将此默认值打印到终端,但不允许我更改任何默认值。例如

import System.IO
main = do
hSetBuffering stdout NoBuffering
putStr "C:\Users\John\project\test"
l <- getLine
doSomethingWith l

我怀疑Data.Text.IOinteract可能可以做我想做的事情,但我无法让它发挥作用。

如有任何建议,我们将不胜感激。

getLine不提供任何行编辑功能。为此,您可以使用类似haskeline的库,例如:

import System.Console.Haskeline
main :: IO ()
main = do
runInputT defaultSettings $ do
mInput <- getInputLineWithInitial "Enter path: "
("C:\Users\John\project\test", "")
case mInput of
Nothing -> do
outputStrLn "No entry."
Just input -> do
outputStrLn $ "Entry: " ++ show input

另一种选择是使用提供行编辑的包装器调用程序,例如rlwrap。为了构建更复杂的全屏文本UI,还有brick,它在Brick.Widgets.Edit中提供了一个简单的文本编辑组件。

最新更新