Jak edytować istniejący tekst (i przesuwać kursor) w terminalu?

Widziałem to demo, które wypisywało akapit tekstu (jak w przypadku pisaniasome-command --help), a następnie wskoczył do kilku słów kluczowych w tekście i zmienił kolor tekstu,po tym, jak został już wydrukowany w terminalu.

Wydaje mi się to szalone. Jak oni to zrobili?

Myślę, że zaczynam o tym myślećstdout istdin są technicznie „strumieniem IO”, więc być może jest to trwała zmienna, która śledzi pozycję kursora? Pamiętam, że robiłem coś takiego podczas budowania parsera języka.

Cel byłby taki: powiedz, że wpiszesz następujące polecenia w konsoli, i wyświetli pustą tablicę, ponieważ w Node.js wszystko jest asynchroniczne i nie chcemy pisać funkcji asynchronicznej za każdym razem w konsoli:

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

Następnie, gdy wykonywane jest wywołanie zwrotne async, wracasz i edytujesz=> [] aby zawrzeć wynik:

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

To byłoby niesamowite, przynajmniej wiedzieć, jak zaimplementować, nawet jeśli istnieje wiele innych problemów do rozwiązania (niezwiązanych z tym pytaniem. I wiem, że możesz zdefiniować globalne wywołanie zwrotne i zrobić coś takiegoApp.User.all(_c)).

Jak edytować dane wyjściowe terminala po jego wydrukowaniu?

questionAnswers(2)

yourAnswerToTheQuestion