Документація на змінні LESS_TERMCAP_ *?


38

Я бачу, як ці гарні кольори в manpages переглядаються з меншим, коли встановлюється купа цих змінних. Що вони означають, де документація? Чи інтерпретується це менше або терміном?

скріншот

ss man сторінки

Відповіді:


45

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

Бібліотека Termcap - це опис можливостей терміналу. Кожен об'єкт ідентифікується двобуквенним (або загалом двозначним) кодом. Наприклад, hcідентифікує термінали на паперовій копії (тобто принтери, а не екрани); co- кількість стовпців; mdпочинає відображати жирний текст. Кожна здатність має значення, яке може бути булевим (як при hc), цілим числом (як з co) або рядком (як при md). Багато з рядків - це послідовності евакуації, які програми можуть надсилати до терміналу для досягнення певного ефекту.

Чому слід уникати послідовностей? Оскільки інтерфейс між терміналом і програмою є символьним потоком (точніше, одним символьним потоком у кожному напрямку: один для введення користувача, один для виведення для відображення). Коли програма записує символ у термінал, вона зазвичай відображається. Кілька символів мають різну поведінку: вони є керуючими символами, які роблять такі речі, як переміщення курсору, перемикання атрибутів дисплея тощо. Команд набагато більше, ніж керуючих символів, тому більшість команд отримує доступ до послідовностей втечі, які починаються з особливий персонаж (часто персонаж втечі, звідси і назва).

Наприклад, коли Менше хоче відобразити якийсь жирний текст, він шукає значення mdможливості. Це рядок, який менше записує до терміналу. Термінал розпізнає цю рядок як послідовність відходу та коригує її внутрішній стан, щоб наступні символи відображалися жирним шрифтом.

У перші дні апаратних терміналів різні марки мали різні послідовності та можливості евакуації; базу даних та інтерфейс Termcap було винайдено, щоб додатки не мали знати про кожну модель терміналу. На сьогоднішній день більшість термінальних емуляторів мають дуже схожі можливості, але база даних Termcap або Terminfo все ще корисна для вирішення незначних відмінностей.

Ці LESS_TERMCAP_*змінні можуть бути встановлені в навколишньому середовищі або в .lesskeyфайлі . Він надає Менше альтернативних значень для можливостей терміналу. Коли Менше хоче використовувати можливості терміналу, скажімо, переключитися на жирний шрифт, він спочатку перевіряє, чи є LESS_TERMCAP_mdзмінна. Якщо ця змінна існує, Менше використовує її значення як послідовність відходу, щоб переключитися на жирний шрифт. Якщо ні, то використовується значення з бази даних Termcap. Цей механізм дозволяє користувачеві перекрити налаштування бази даних Termcap для Менше.

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

LESS_TERMCAP_md=$(tput md; tput AF 1)

або якщо ваша tputкоманда не підтримує назви Termcap:

LESS_TERMCAP_md=$(tput bold; tput setaf 1)

Людина надсилає менше тексту з дуже простим форматуванням, яке може виражати лише жирним шрифтом та курсивом. Крім того, 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_TERMCAP_DEBUG на щось, а потім відкриєте людину, ви можете побачити щось на кшталт джерела сторінок man і в ньому всі теги можливостей, які використовуються. Полегшує вирішити, на що ви хочете їх встановити.
ангелм

1
Дивіться цю відповідь про те, як встановити всі LESS_TERMCAP_*env vars, використовуючи tputзамість символів втечі.
Каушал Моді

3

Відповідь Жиля - відмінна, але це мене викликало цікавість:

Termcap значною мірою застарілий, його замінив Terminfo

  1. Якщо Termcap застарілий, я хочу перейти на Terminfo

  2. Я також хочу відключитися від 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.