Как написать текстовое приглашение в Nim с редактированием строк в стиле readline? - PullRequest
0 голосов
/ 07 апреля 2020

readLine() не поддерживает редактирование строки и вызов предыдущих команд, например:

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

Не редактирует. Но если я скомпилирую это и заверну в rlwrap:

$ rlwrap read_test

Это работает, как я надеюсь. с редактируемыми и повторно вызываемыми строками, предоставляемыми библиотекой readline.

readLineFromStdin() почти работает, но не поддерживает ctrl + d, он возвращает пустую строку по ctrl + d, которая неотличима от новой строки.

Как я могу сделать это в чистом Ним? Спасибо!

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

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) не так уж сложно, и вы можете переписать свой собственный код, добавив в него вышеуказанный код.

0 голосов
/ 15 апреля 2020

Хотя ответ @ xbello верный, если вы хотите использовать пакет, мы в итоге использовали https://github.com/jangko/nim-noise, который поддерживает обработку C -d и множество других функций.

...