Поддерживает ли `less` или `more` ANSI-экранирование `\x1b[2K` (erase_line)?

Поддерживает ли `less` или `more` ANSI-экранирование `\x1b[2K` (erase_line)?

В принципе, я хочу анимировать свой терминал, но поскольку текст слишком длинный, мне нужен пейджер. Скажем так, я хочу периодически менять цвет текста в less. Возможно ли это?

решение1

РЕДАКТИРОВАТЬОтветы отфонбрандиТомас Дикиболее точны с технической точки зрения.

lessподдерживает необработанные экранированные символы ANSI при -rиспользовании этой опции. Также поддерживается стирание в строке.

Но никакой анимации вы не увидите. Например:

echo -e "foo\x1b[1G\x1b[2Kbar" > test.ansi
less -r test.ansi

Будет только печатать bar.

moreпо умолчанию передает экранированные символы ANSI, но, насколько я помню, не поддерживает редактирование строк.

Смотрите такжеэтот ответ Stackoverflow о различиях lessиmoremost.

решение2

Очистка линии имеет лишь косвенное отношение к изменению цвета терминала: если вы меняетефонцвет, то многие терминалы (консоль Linux, rxvt, xterm, а также программы, имитирующие один из них) окрасят очищенную область фона в этот цвет.

lessиспользует несколько операций очистки, но не \x1b[2K. Чтениеисточник, он использует несколько функций, используя интерфейс termcap. Наиболее важные части описаны втермино(5)страница руководства:

   clr_bol                   el1    cb   Clear to beginning
                                         of line
   clr_eol                   el     ce   clear to end of line
                                         (P)

То есть, \x1b[Kи \x1b[K, для el1и el, соответственно. Не существует обычной возможности termcap el2, и (если только вы не укажете lessпросто передать содержимое файла с помощью параметра -rили -R), lessне отправит \x1b[2K.

То же самое относится more, например, кutil-linuxпакет: использует только функции из termcap. В отличие от less, moreне имеет возможности отправлять непечатаемые символы напрямую на терминал.

Если вы используете опцию -rили , вы должны иметь в виду, что это-Rlessограниченное: lessне знает (или не очень заботится), что делают эти побеги. Изстраница руководства:

-rили--raw-control-chars
Причины"сырой"Управляющие символы, которые будут отображаться. По умолчанию управляющие символы отображаются с использованием нотации каретки; например, control-A (восьмеричное 001) отображается как "^A". Предупреждение: когда -r опция используется,less не могуследите за фактическим видом экрана (так как это зависит от того, как экран реагирует на каждый тип управляющего символа). Таким образом, могут возникнуть различные проблемы с отображением, такие как длинные строки, разделенные в неправильном месте.

решение3

Обычно на управляющие последовательности реагирует tty (если только запущенная программа не настроит его не учитывать их, в таком случае программа сама может это сделать). more(1)выполняет довольно примитивную перезапись экрана (достаточно просто вывести строки, соответствующие длине экрана, и ждать нажатия клавиши), поэтому я предполагаю, что он просто пропускает ввод. less(1)нуждается в резервном копировании, поэтому ему требуется более детальный контроль экрана.

Связанный контент