【问题标题】:How to write a text prompt in Nim that has readline-style line editing?如何在 Nim 中编写具有 readline 样式行编辑的文本提示?
【发布时间】:2020-04-07 12:02:26
【问题描述】:

readLine() 不支持行编辑和调用之前的命令,例如:

while true:
  var name: string = readLine(stdin)
  echo "Hi, ", name, "!"

没有编辑。但如果我编译它并将其包装在 rlwrap 中:

$ rlwrap read_test

它按我希望的那样工作。具有可编辑和可调用的行,由 readline 库提供。

readLineFromStdin() 几乎可以工作,但不支持 ctrl+d,它在 ctrl+d 上返回一个空字符串,与换行符没有区别。

我怎样才能在纯 Nim 中做到这一点?谢谢!

【问题讨论】:

    标签: input terminal readline nim-lang


    【解决方案1】:

    Ctrl+D 是一个 EOF “信号”,因此您可以在输入中捕获 EOF:

    while not endOfFile(stdin):
      var name: string = readLine(stdin)
      echo "Hi, ", name, "!"
    

    readLineFromStdin(https://github.com/nim-lang/Nim/blob/version-1-2/lib/impure/rdstdin.nim#L54)的过程并不复杂,你可以自己重新编写上面的代码。

    【讨论】:

    • 太棒了!我们最终使用 nim-noise 作为 readline 的替代品,它带有大量的花里胡哨
    【解决方案2】:

    虽然@xbello 的回答是正确的,但如果你想使用一个包,我们最终使用了https://github.com/jangko/nim-noise,它支持 C-d 处理和许多其他功能。

    【讨论】:

      猜你喜欢
      • 2021-03-03
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 2020-06-11
      • 2022-12-05
      • 2018-05-05
      相关资源
      最近更新 更多