%3F.png)
В принципе, я хочу анимировать свой терминал, но поскольку текст слишком длинный, мне нужен пейджер. Скажем так, я хочу периодически менять цвет текста в less. Возможно ли это?
решение1
РЕДАКТИРОВАТЬОтветы отфонбрандиТомас Дикиболее точны с технической точки зрения.
less
поддерживает необработанные экранированные символы ANSI при -r
использовании этой опции. Также поддерживается стирание в строке.
Но никакой анимации вы не увидите. Например:
echo -e "foo\x1b[1G\x1b[2Kbar" > test.ansi
less -r test.ansi
Будет только печатать bar
.
more
по умолчанию передает экранированные символы ANSI, но, насколько я помню, не поддерживает редактирование строк.
Смотрите такжеэтот ответ Stackoverflow о различиях less
иmore
most
.
решение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
или , вы должны иметь в виду, что это-R
less
ограниченное: less
не знает (или не очень заботится), что делают эти побеги. Изстраница руководства:
-r
или--raw-control-chars
Причины"сырой"Управляющие символы, которые будут отображаться. По умолчанию управляющие символы отображаются с использованием нотации каретки; например, control-A (восьмеричное 001) отображается как "^A". Предупреждение: когда-r
опция используется,less
не могуследите за фактическим видом экрана (так как это зависит от того, как экран реагирует на каждый тип управляющего символа). Таким образом, могут возникнуть различные проблемы с отображением, такие как длинные строки, разделенные в неправильном месте.
решение3
Обычно на управляющие последовательности реагирует tty (если только запущенная программа не настроит его не учитывать их, в таком случае программа сама может это сделать). more(1)
выполняет довольно примитивную перезапись экрана (достаточно просто вывести строки, соответствующие длине экрана, и ждать нажатия клавиши), поэтому я предполагаю, что он просто пропускает ввод. less(1)
нуждается в резервном копировании, поэтому ему требуется более детальный контроль экрана.