Как редактировать существующий текст (и перемещать курсор) в терминале?

Однажды я видел эту демонстрацию, которая распечатывала абзац текста (как вы получаете при вводе some-command --help), а затем возвращалась к паре ключевых слов. в тексте и изменил цвет текста, после того, как он уже был распечатан в терминале.

Мне это кажется безумием. Как они это сделали?

Если подумать, я думаю, что stdoutи stdinтехнически являются «потоком ввода-вывода», так что, может быть, это постоянная переменная, которая отслеживает положение курсора? Я помню, как делал что-то подобное при создании парсера языка.

Цель может быть такой: допустим, вы вводите в консоль следующее, и он выводит пустой массив, потому что в Node.js все это асинхронно, и мы не хотим каждый раз писать асинхронную функцию в консоли:

$ node app.js
> App.User.all()
=> []

Затем, когда выполняется асинхронный обратный вызов, вы возвращаетесь и редактируете => [], чтобы включить результат:

$ node app.js
> App.User.all()
=> [#<User id:1>, #<User id:2>...]

Было бы здорово, по крайней мере, знать, как реализовать, даже если есть много других проблем, которые нужно решить (не связанные с этим вопросом. И я знаю, что вы можете определить глобальный обратный вызов и сделать что-то вроде App.User.all(_c)).

Как редактировать вывод терминала после того, как он уже напечатан?

20
задан Lance Pollard 14 May 2012 в 14:49
поделиться