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

Editable default string in Haskell's terminal input

我希望能够提示用户输入(比如 FilePath),但也希望提供 mutable/interactive 字符串作为默认情况下,我可以提示用户输入完整路径,而不是让用户输入:

C:\Users\John\project\test

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

但是使用 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. For building a more complex fullscreen text UI, there is also brick,它在 Brick.Widgets.Edit.

中提供了一个简单的文本编辑组件