我似乎不知道如何让 Haskeline 允许用户使用箭头键浏览命令历史记录。
我阅读了Hackage并尝试使用Settings {complete =completeFilename,historyFile=Nothing,autoAddHistory=True}就像他们给出的默认值一样,但这不起作用,我尝试给historyFile一个值,然后它只会保存我输入的第一个命令并且只有在程序退出之后,我尝试过的所有小调整都没有帮助。如果相关,我可以提供其余的代码。
不是完整的答案,但您可以测试以下最小示例吗:
import System.Console.Haskeline
main :: IO ()
main = runInputT settings loop
where
loop = do
getInputLine "> "
loop
settings = Settings
{ complete = completeFilename
, historyFile = Just ".foo_history"
, autoAddHistory = True }
您应该能够在提示符下输入多个输入行,并使用箭头键滚动浏览历史记录:
$ runghc Line.hs
> foo
> bar
> baz
> [use arrow keys here]
如果输入一些行后按 Ctrl-C 退出,它们应该全部出现在“.foo_history”文件中:
> [Ctrl-C]
$ cat .foo_history
baz
bar
foo
如果箭头键不起作用,请尝试 Emacs 兼容的击键(Ctrl-P 和 Ctrl-N 用于上一个和下一个)。
基于此:
putHistory
或 modifyHistory
)?如果不是,您的程序是否可能尝试通过 Haskeline 的 getInputLine
以外的函数读取标准输入,并且可能“窃取”一些应由 Haskeline 处理的输入(例如,如果您打算从一个文件,但不小心运行了 getLine
而不是 hGetLine
)?