Документация по переменным LESS_TERMCAP_ *?

Ответы:

45

Termcap - это библиотека, которую Less использует для доступа к терминалу. Termcap в значительной степени устарел, его заменил Terminfo , но Terminfo предлагает интерфейс совместимости Termcap для приложений. Меньше довольствуется интерфейсом Termcap и использует его.

Библиотека Termcap - это описание возможностей терминала. Каждое средство идентифицируется двухбуквенным (или, более обычно, двухбуквенным) кодом. Например, hcидентифицирует печатные терминалы (то есть принтеры, а не экраны); coколичество столбцов; mdначинает отображать жирный текст. Каждая возможность имеет значение, которое может быть логическим (как с hc), целым числом (как с co) или строкой (как с md). Многие из строк являются escape-последовательностями, которые приложения могут отправлять на терминал для достижения определенного эффекта.

Зачем избегать последовательности? Поскольку интерфейс между терминалом и приложением представляет собой поток символов (точнее, один поток символов в каждом направлении: один для пользовательского ввода, один для вывода для отображения). Когда приложение записывает символ в терминал, он обычно отображается. Несколько символов имеют различное поведение: они являются управляющими символами, которые выполняют такие вещи, как перемещение курсора, переключение атрибутов отображения и т. Д. Команд намного больше, чем управляющих символов, поэтому большинство команд доступны через escape-последовательности, которые начинаются с специальный символ (часто это экранирующий символ, отсюда и название).

Например, когда Less хочет отобразить некоторый жирный текст, он ищет значение mdвозможности. Это строка, которую Less записывает в терминал. Терминал распознает эту строку как escape-последовательность и корректирует ее внутреннее состояние так, чтобы последующие символы отображались жирным шрифтом.

В первые дни аппаратных терминалов у разных брендов были разные последовательности выхода и возможности; база данных и интерфейс Termcap были изобретены так, чтобы приложениям не приходилось знать о каждой модели терминала. В настоящее время большинство эмуляторов терминалов имеют очень похожие возможности, но база данных Termcap или Terminfo по-прежнему полезна для устранения незначительных различий.

Эти LESS_TERMCAP_*переменные могут быть установлены в окружающей среде или в .lesskeyфайле . Он предоставляет Меньше с альтернативными значениями для возможностей Терминала. Когда Less хочет использовать возможности терминала, скажем, переключиться на полужирный, он сначала проверяет, есть ли LESS_TERMCAP_mdпеременная. Если эта переменная существует, Less использует ее значение в качестве escape-последовательности для переключения на жирный шрифт. Если нет, он использует значение из базы данных Termcap. Этот механизм позволяет пользователю переопределить настройки базы данных Termcap для Less.

Самые полезные LESS_TERMCAP_*настройки - escape-последовательности. Вы можете сопоставить атрибуты с различными атрибутами. Вы можете использовать tputкоманду для поиска значения возможности для текущего терминала в системной базе данных Termcap или Terminfo . Вы можете использовать escape-последовательности напрямую, если не против зависеть от терминала. Например, этот параметр указывает, чтобы Less отображался жирным красным цветом, когда указано отображать жирным шрифтом:

LESS_TERMCAP_md=$(tput md; tput AF 1)

или если ваша tputкоманда не поддерживает имена Termcap:

LESS_TERMCAP_md=$(tput bold; tput setaf 1)

Человек отправляет меньше текста с очень простым форматированием, которое можно выразить только жирным шрифтом и курсивом. Кроме того, Less использует различные возможности форматирования для внутреннего использования, например, для выделения результатов поиска и отображения строки режима внизу. Вот некоторые escape-последовательности, которые использует Less (я перечисляю только те возможности, которые целесообразно переназначить):

termcap terminfo  
ks      smkx      make the keypad send commands
ke      rmkx      make the keypad send digits
vb      flash     emit visual bell
mb      blink     start blink
md      bold      start bold
me      sgr0      turn off bold, blink and underline
so      smso      start standout (reverse video)
se      rmso      stop standout
us      smul      start underline
ue      rmul      stop underline

Чтобы показать вывод в цвете, используйте setafвозможность (или AFс Termcap).

Эти LESS_TERMCAP_*параметры не указаны в LESSдокументации. Лучшая ссылка, которую я могу предложить, - мой ответ здесь .

Жиль "ТАК - прекрати быть злым"
источник
8
Спасибо. Я также кратко посмотрел на исходный код less и обнаружил, что когда вы устанавливаете LESS_TERMCAP_DEBUG на что-то, а затем открываете man, вы можете увидеть что-то вроде источника man-страниц и в нем все используемые теги возможностей. Облегчает выбор того, на что вы хотите их установить.
Ансельм
1
Посмотрите этот ответ о том, как установить все LESS_TERMCAP_*переменные env, используя tputвместо escape-символов.
Каушал Моди
3

Ответ Жиля превосходен, но это сделало меня любопытным:

Termcap в значительной степени устарел, его заменил Terminfo

  1. Если Termcap устарел, я хочу переключиться на Terminfo

  2. Я также хочу отключиться от Termcap, потому что нашел ошибку. Скажем, вы поместили переменную termcap в ваш ~/.profileили подобный:

    export LESS_TERMCAP_so=$(printf '\33[5;30;43m')
    export LESS_TERMCAP_se=$(printf '\33[m')

    После этого, если вы введете set, переменные Termcap испортят ваш цветовой вывод.

Чтобы переключиться на Terminfo, вы можете сделать файл xterm-pretty.ti:

xterm-pretty|xterm with pretty colors,
# exit standout mode
  rmso=\e[m,
# begin standout mode
  smso=\e[5;30;43m,
# similar terminal
  use=xterm,

Скомпилируйте и установите файл:

tic xterm-pretty.ti

Добавить строку ~/.profileили аналогичную:

TERM=xterm-pretty
Стивен Пенни
источник