Haskell 终端输入中的可编辑默认字符串
Editable default string in Haskell's terminal input
我希望能够提示用户输入(比如 FilePath
),但也希望提供 mutable/interactive 字符串作为默认情况下,我可以提示用户输入完整路径,而不是让用户输入:
C:\Users\John\project\test
并让他们能够退格 4 次并输入 final
以产生 C:\Users\John\project\final
,而不是键入整个路径。
但是使用 putStr
或 System.IO.hPutStr stdout
打印默认字符串 确实 将此默认字符串打印到终端,但不允许我更改其中任何一个.例如
import System.IO
main = do
hSetBuffering stdout NoBuffering
putStr "C:\Users\John\project\test"
l <- getLine
doSomethingWith l
我怀疑 Data.Text.IO
的 interact
可以做我想做的事,但我无法让它工作。
如有任何建议,我们将不胜感激。
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
.
中提供了一个简单的文本编辑组件
我希望能够提示用户输入(比如 FilePath
),但也希望提供 mutable/interactive 字符串作为默认情况下,我可以提示用户输入完整路径,而不是让用户输入:
C:\Users\John\project\test
并让他们能够退格 4 次并输入 final
以产生 C:\Users\John\project\final
,而不是键入整个路径。
但是使用 putStr
或 System.IO.hPutStr stdout
打印默认字符串 确实 将此默认字符串打印到终端,但不允许我更改其中任何一个.例如
import System.IO
main = do
hSetBuffering stdout NoBuffering
putStr "C:\Users\John\project\test"
l <- getLine
doSomethingWith l
我怀疑 Data.Text.IO
的 interact
可以做我想做的事,但我无法让它工作。
如有任何建议,我们将不胜感激。
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
.