Я бачу, як ці гарні кольори в manpages переглядаються з меншим, коли встановлюється купа цих змінних. Що вони означають, де документація? Чи інтерпретується це менше або терміном?
Я бачу, як ці гарні кольори в manpages переглядаються з меншим, коли встановлюється купа цих змінних. Що вони означають, де документація? Чи інтерпретується це менше або терміном?
Відповіді:
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
документації. Найкраща посилання, яку я можу запропонувати, - це моя відповідь тут .
LESS_TERMCAP_*
env vars, використовуючи tput
замість символів втечі.
Відповідь Жиля - відмінна, але це мене викликало цікавість:
Termcap значною мірою застарілий, його замінив Terminfo
Якщо Termcap застарілий, я хочу перейти на Terminfo
Я також хочу відключитися від 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