Я видел эту демонстрацию после того, как напечатал абзац текста (например, вы получили при вводе some-command --help
), а затем перепрыгнул обратно до пары ключевых слов в тексте и изменил цвет текста после того, как он был уже распечатанных в терминале.
Это кажется сумасшедшим для меня. Как они это сделали?
Начиная думать об этом, я думаю, stdout
и stdin
являются технически "потоком IO", так что, возможно, это постоянная переменная, которая отслеживает положение курсора? Я помню, что делал что-то подобное при создании парсера языка.
Цель состоит в следующем: скажем, вы вводите следующее в консоль и выводите пустой массив, потому что в Node.js все это асинхронно, и мы не хотим каждый раз писать функцию async в консоли
$ node app.js
> App.User.all()
=> []
Затем, когда выполняется обратный вызов async, вы возвращаетесь и редактируете => []
, чтобы включить результат:
$ node app.js
> App.User.all()
=> [#<User id:1>, #<User id:2>...]
Было бы здорово хотя бы знать, как реализовать, даже если есть много других проблем для работы (не связанных с этим вопросом. И я знаю, что вы можете определить глобальный обратный вызов и сделать что-то вроде App.User.all(_c)
).
Как вы редактируете вывод терминала после его печати?