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

Я видел это демо, как только он распечатал абзац текста (как если бы вы печатали 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)).

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

Ответы на вопрос(2)

Ваш ответ на вопрос