Есть ли способ очистить определенное количество строк в терминале?


0

Вот пример использования:

  1. node.jsСкрипт очищает консоль.
  2. Затем он отправляет некоторые метаданные на консоль. ( Имя модуля и слоган . Вроде как заголовок приложения.)

  3. Он отправляет прошлые данные на консоль. (Вроде как начальный контент приложения, который после его выпуска не изменится после выпуска. По крайней мере, до выхода.)

  4. Он делает то, для чего предназначен, для чего был создан модуль, и также передает это на консоль.

Шаг 4 - это непрерывный процесс. И поэтому вы можете думать о шаге 4 как о часах . Через каждую секунду часы сбрасываются и отображают новое время.

\033cработал бы хорошо, если бы Шаг 1-3 не был там. Но они есть, и я могу думать только о том, чтобы снова распечатать все данные.

Это работает, но это не самый производительный код. Итак, есть ли способ очистить вывод шага 4, а затем перепечатать его с изменениями?

Примечание . Последняя строка терминала не обязательно является последней строкой программы.


Все терминалы понимают управляющие коды, которые позволяют вам позиционировать курсор, стирать строки и т. Д. База данных terminfo содержит их, а тип терминала задается TERMпеременной среды. Библиотеки, чтобы использовать это, например curses. Но это старая технология, я не знаю, как получить к ней доступ из node.js ...
dirkt

Спасибо за ответ, @dirkt. Я тоже так думал, что это возможно. Но, к сожалению, мне нужна node.jsоболочка или какая-то команда bash, которую я могу выполнить node.
Абхишек Сони

Ответы:


1

\ 033c работало бы нормально, если бы не было шага 1-3.

\033является Escapeсимволом контрольного кода ASCII . Я считаю Escape cпоследовательность команд терминала ANSI для сброса терминала.

Вы можете, вероятно, выполнить CR(возврат каретки), чтобы переместить курсор к левому полю и затем Escape [ K(очистить до конца строки).

Если выходные данные шага 4 состоят из нескольких строк, необходимо выполнить соответствующие команды для перемещения курсора в строку, столбец и очистки до конца экрана.

Поиск «Коды управления терминалом ANSI» должен найти полезный справочный материал.

Мне нужно ... какая-то команда bash

man tput

рассматривать

$ echo aaa bbb ccc `tput cr`xxx
xxx bbb ccc

$ echo aaa bbb ccc `tput cr`xxx `tput el`
xxx

или же

$ echo aaa bbb ccc; echo ddd eee fff
aaa bbb ccc
ddd eee fff

$ echo aaa bbb ccc; echo ddd eee fff; echo `tput cup 23 3` ZZZ
aaa bbb ccc
ddd ZZZ fff

или же

$ echo aaa bbb ccc; echo ddd eee fff; echo `tput cup 22 3` ZZZ `tput ed`
aaa ZZZ

где используются коды возможностей

  • cr = возврат каретки (курсор на левое поле).
  • el = очистить от курсора до конца строки.
  • cup = позиционирование курсора.
  • ed = очистить от курсора до конца экрана.

Эти коды возможностей перечислены в man terminfo.

Если вы хотите знать, что делает tput, вы можете сделать что-то вроде

$ (tput cup 23 3; echo) | cat -v
^[[24;4H

Где ^[представляет контрольный код Escape(\ 033).

Это даст вам значения, которые вы можете использовать любым способом, который вы намеревались использовать \033c

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.