Однажды я видел эту демонстрацию, которая распечатывала абзац текста (как вы получаете при вводе 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)
).
Как редактировать вывод терминала после того, как он уже напечатан?