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?