Como você edita o texto existente (e move o cursor) no terminal?

Eu vi esta demo uma vez que imprimiu um parágrafo de texto (como você faria ao digitarsome-command --help), e então pulou de volta para algumas palavras-chave no texto e mudou a cor do texto,depois que já foi impresso no terminal.

Isso parece loucura para mim. Como eles fizeram isso?

Começando a pensar sobre isso, eu achostdout estdin tecnicamente são um "fluxo IO", então talvez essa seja uma variável persistente que controla a posição de um cursor? Lembro-me de fazer algo assim ao criar um analisador de idioma.

O objetivo seria este: digamos que você digite o seguinte no console e produza um array em branco, porque no Node.js, tudo é assíncrono e não queremos gravar a função async toda vez no console:

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

Então, quando o callback assíncrono é executado, você volta e edita o=> [] para incluir o resultado:

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

Isso seria incrível, pelo menos, saber como implementar, mesmo que haja muitos outros problemas para resolver (não relacionados a essa pergunta. E eu sei que você pode definir um retorno de chamada global e fazer algo comoApp.User.all(_c)).

Como você edita a saída do terminal depois de já ter sido impressa?

questionAnswers(2)

yourAnswerToTheQuestion