Как вы редактируете существующий текст (и перемещаете курсор) в терминале?

Я видел это демо, как только он распечатал абзац текста (как если бы вы печатали 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)).

Как вы редактируете вывод терминала после того, как он уже напечатан?

Ответы на вопрос(2)

Решение Вопроса

https: //github.com/asyncly/cdir/blob/223fe0039fade4fad2bb08c2f7affac3bdcf2f89/cdir.js#L2http: //tldp.org/HOWTO/Bash-Prompt-HOWTO/x361.htm

http: //ascii-table.com/ansi-escape-sequences-vt-100.ph

Поместите курсор:\033[<L>;<C>H или\033[<L>;<C>f (помещает курсор в строку L и столбец C)

Переместите курсор вверх на N строк:\033[<N>A Переместите курсор вниз на N строк:\033[<N>B Переместите курсор вперед на N столбцов:\033[<N>C Переместите курсор назад на N столбцов:\033[<N>D Очистить экран, перейти к (0,0):\033[2J Стереть до конца строки:\033[K Сохранить положение курсора:\033[s Восстановить позицию курсора:\033[u
 GGG21 июл. 2016 г., 21:28
Также важно отметить, что последние 2 кода (сохранение позиции курсора и восстановление позиции курсора) не поддерживаются повсеместно. Как указано во втором источнике, предоставленном вами:The latter two codes are NOT honoured by many terminal emulators. The only ones that I'm aware of that do are xterm and nxterm - even though the majority of terminal emulators are based on xterm code.
 Jason Goemaat24 авг. 2016 г., 11:36
Не может использоваться в строках шаблонов или строгом режиме, но вы можете заменить восьмеричный\033 с шестнадцатеричным\x1b или юникод\u001b.

я полагаю, что программа Eddie делает что-то вроде «редактировать вывод терминала после того, как он уже напечатан». (см. «Эдди (текстовый редактор) в Википедии»).

В меню «Файл» выберите «Новый», а затем в «Настройки / Настройки документа ...» выберите «Окно оболочки». После этого попробуйте пару команд unix: date, ls, cal и т. Д. Затем наведите курсор и отредактируйте их.

Я бы попробовал с Node, но не смог установить его (Node) под Mac OS X 10.5.8.

Ваш ответ на вопрос