Підтримка tmux, TERM та 256 кольорів


48

Вступ

Моє запитання виникає з необхідності розуміння того, чому у мене зараз (після декількох випробувань) термінали та tmux підтримують 256 кольорів і tput colorsкажуть, що їх лише 8.


Фон

Почнемо з початку.

Я використовую коробку Ubuntu , Guake , tmux , Vim, і я люблю тему Solarized . Вони виглядали досить жахливо, тому я вирішив включити підтримку 256 кольорів і трохи пограти.

Подивимося, що станеться з моїм Терміналом . tput colorsкаже, що існує 8 кольорів. Я особисто встановив їх на фіолетовий, зліва, і, звичайно, праворуч у нас є 2 різних відтінки синього. $TERMкаже xterm. (Щоб мати кольоровий lsя eval це у своєму .bashrc.)

введіть тут опис зображення

Vim також виглядає чудово, незважаючи на те, що я називаю це 256прапором у середовищі, де 256 кольорів не підтримуються.

set t_Co=256
let g:solarized_termcolors=256
colorscheme solarized

Єдиний хлопець, який скаржиться на зменшений кольоровий простір, - tmux . Виклик tmuxзабезпечує "неправильні" очікувані результати.

введіть тут опис зображення

Але виклик tmuxз -2прапором робить все відмінно працює, чарівно .

введіть тут опис зображення

Тепер єдине, що я розумію, -2це еквівалент export TERM=screen-256color( джерело ).

Гуаке поводиться аналогічно Терміналу, і вони обидва відповідають xtermна питання echo $TERM.


Питання

По суті, хтось розуміє, чому все працює, навіть якщо не повинно?

  • Чи я садист, що я скаржуюся, чому все працює? Може бути.
  • Чи є краща причина? Впевнений: я хотів би виправити появу інших скриньок Ubuntu у своєму кабінеті, і я хотів би зрозуміти, чому все працює чи не працює.

Додаткові експерименти

Запуск цього сценарію (трохи змінений) на моєму xtermдає наступний результат: 256 кольорів, але лише 16 відображаються правильно.

введіть тут опис зображення

Потім, змінюючи профіль терміналу, також змінюються ці 16 кольорів.

введіть тут опис зображення

Ще тести наступні.

Зліва направо, зверху вниз, ми маємо кольорову тему Соляризовану , dircolor ansi-darkа 256darkпотім кольорову гаму за замовчуванням ( Танго ) dircolor ansi-darkта 256dark.

введіть тут опис зображення

Спостереження : теоретично кольорова схема dircolor ansi-darkна соляризованій основі повинна відповідати тій самій dircolor 256dark. Це не однозначно відбувається для конкретних перелічених файлів. Натомість це цілком відбувається, коли в робочому каталозі є папки , текстові файли та символьні посилання . Висновок : при кодуванні 256darkкольорів не приділялося багато уваги .


Попередні висновки

xtermпідтримує 256 кольорів, незважаючи на те, що tput colorsговорить. Програми можуть посилатися на ansiпалітру (налаштовується користувачем) або визначати їх кольори, вибираючи із 256 кольорів.


1
Прочитайте цю відповідь та коментарі під нею. Чи відповідає це на ваше запитання? Також перегляньте цей сценарій, щоб отримати реальну кількість кольорів, що підтримуються.
тердон

Гум ... Я все ще трохи розгублений ... Але, я думаю, я принаймні розумію, що tput colorsце ненадійне випробування. Не могли б ви перевірити мої попередні висновки ?
Atcold

2
Я читаю відповідь Gilleś, що tput colorsможна повернути лише одне значення, а в терміналах, які підтримують будь-який із 2,8,16,88 або 256 кольорів, повертається лише перше значення (8 у вашому випадку). Щоб отримати справжнє значення, використовуйте скрипт з мого останнього коментаря. Що це повертає?
terdon

Перевірте мої додаткові експерименти вище :)
Atcold

Ах, вибач, моя погана.
тердон

Відповіді:


33

Інформація про підтримку 256 кольорів є у поширених питаннях tmux .

Визначення кількості кольорів, які підтримує термінал, на жаль, не є простим, з історичних причин. Див. Розділ Перевірка кількості кольорів, який підтримує мій емулятор терміналу, для пояснення. Це означає що

  • tmux не може достовірно визначити, чи підтримує термінал більше 8 кольорів;
  • tmux не може надійно повідомити програмі, що вона підтримує більше 8 кольорів.

Коли ви знаходитесь у tmux, термінал, з яким ви взаємодієте, є tmux. Він не підтримує всі контрольні послідовності xterm. Зокрема, він не підтримує OSC 4 ; …керуючу послідовність для запиту або встановлення значень кольору. Вам потрібно використовувати це під час прямого запуску в xterm, поза tmux.

Якщо ви запускаєте tmux -2, то tmux починається з 256-кольорової підтримки, навіть якщо він не вважає, що ваш термінал підтримує 256 кольорів (що досить часто).

За замовчуванням tmux рекламує себе як screenбез 256-кольорової підтримки. Ви можете змінити значення TERMв, .tmux.confщоб вказати підтримку 256 кольорів:

set -g default-terminal "screen-256color"

Ви можете використовувати TERM=xterm-256colorабо TERM=screen-256colorна Ubuntu. Ці значення спричинить неполадки лише в тому випадку, якщо ви увійдете на віддалену машину, яка не має запису термінака / terminfo для цих імен. Ви можете скопіювати записи у свій домашній каталог на віддаленій машині; це працює з більшістю сучасних реалізацій terminfo.

# From the Ubuntu machine to a machine that doesn't have *-256color terminfo entries
ssh somewhere.example.com mkdir -p .terminfo/s .terminfo/x
scp -p /lib/terminfo/s/screen-256color somewhere.example.com:.terminfo/s/
scp -p /lib/terminfo/x/xterm-256color somewhere.example.com:.terminfo/x/

Я ціную це пояснення, але я не впевнений, що він націлений на моє питання. Ну, я згоден, що моє запитання було досить широким, але я не зосереджувався конкретно на tmux . Власне, tmux був єдиним хлопцем, який поводився відповідно до очікування. Набагато загадковіше було те, як xtermвдалося показати мені 256 кольорів, хоча tput colorsговорив 8. Я здогадуюсь, що відповідь на це конкретне запитання надіслав @terdon у своєму коментарі до самого питання.
Atcold

@Atcold Це довге питання, але наскільки я можу сказати, я відповів на нього. Частини, що не стосуються tmux, охоплені відповіддю, що ми з Тердоном пов’язали (і що я написав). Ваше питання було б дублікатом цього питання, якби не tmux аспект. Чого більше ви очікували від відповіді?
Жил 'ТАК - перестань бути злим'

1
@Gilles , я не хотіла звучати зле . Я намагався акредитувати @terdon "прийняту відповідь", хоча він посилається на вашу відповідь в іншому запитанні. Незважаючи на це, set -g default_terminal "screen-256color"команди недостатньо для включення 256 кольорів у tmux . Вам потрібно alias tmux='export TERM=screen-256color; /usr/bin/tmux'( посилання ).
Atcold

@Atcold Ні, псевдонім не потрібен (я тестував). Крім того, цей псевдонім не мав би сенсу: він робить вигляд tmux, що він працює всередині екрана або tmux. Однак вам потрібно запустити, tmux -2як зазначено в моєму попередньому абзаці, якщо tmux не вважає, що ваш поточний термінал підтримує 256 кольорів, це alias tmux='tmux -2'мало б сенс.
Жиль "ТАК - перестань бути злим"

2
@Atcold Відповідь U&L має TERM=xterm-256color tmux, що є розумним, на відміну від цього TERM=screen-256color tmux. tmux -2є вищим, оскільки працює, навіть якщо screen-256colorвін не знаходиться в локальній базі даних terminfo.
Жил "ТАК - перестань бути злим"

20

Мене вражає, наскільки насичено відформатовані та деталізовані відповіді (і питання!). Хоча вони надають цінну інформацію та рішення щодо згаданих вами інструментів, вони дають дуже мало розуміння того, про що йдеться , і, найголовніше, чому справи (дещо) працюють для деяких інструментів, коли вони нібито не повинні.

Ось ось декілька розумінь щодо ваших основних питань:

  • Що підтримує термінал і про що він повідомляє - це різні речі. Наприклад, термінал Gnome здатний відображати 256 кольорів, але він повідомляє про себе в середовищі (через $TERMзмінну) як xtermемулятор (8 кольорів).

  • Такі інструменти, як tputдотримуйтесь того TERM, що встановлено: tput colorsможе надрукувати 8, а env TERM=xterm-256color tput colorsдрукувати 256, незалежно від того, чи дійсно ваш термінал підтримує такі можливості.

  • vimтакож дотримуйтесь TERMза замовчуванням, але, як ви сказали, використовувати 256 кольорів (через прапор або set t_Co=256), він використовуватиме 256 кольорів. І це працює, тому що ваш термінал насправді підтримує це.

  • tmux, як і Gnome Terminal, також за замовчуванням повідомляє про себе як 8-кольоровий термінал. Але, на відміну від терміналу Gnome, він дозволяє лише 256 кольорових можливостей, якщо ви використовуєте -2прапор, що також змушує звітувати про себе як xterm-256colorсумісний емулятор.

  • xterm, як в програмному забезпеченні емулятора терміналів для X11 , підтримує 256 кольорів точно. Але xtermяк у TERM=xterm8-кольоровому "еталоні". Це означає можливості оригіналу xterm . Коли він був модернізований до підтримки 256 кольорів, він давно ввів xterm-256colorтермін для цього.

Отже, все зводиться до:

  • Які можливості насправді підтримує ваш термінал (і це ввімкнено)

  • Як він повідомляє про такі можливості навколишньому середовищу через TERM

  • Як інструменти інтерпретують TERMі коригують себе відповідно.

  • Як можна зробити висновок із вищезазначеного, уникайте забивання export TERM=xterm-256colorваших ~/.bashrcта таких сценаріїв . Оскільки ці файли виконуються незалежно від терміналу, який ви фактично використовуєте, вони змусять усі ваші термінали, включаючи віддалені з’єднання з Windows з Putty, консольним терміналом Linux тощо, звітувати про себе як xterm-256color сумісні. Що може бути правдою для деяких, але, звичайно, не для всіх. Наприклад, gettyконсоль Linux, до якої ви отримуєте доступ CTRL+ALT+1..6, не робить.

  • Термінали повинні повідомляти про себе як "стандарт", з яким вони найбільш сумісні. Якщо ви знаєте, що вони можуть працювати з 256 кольорами, налаштуйте їх на рекламу як таку.

І останнє, але не в останню чергу, дивовижне читання про TERM256 кольорів:

http://blog.sanctum.geek.nz/term-strings/

http://blog.sanctum.geek.nz/256-colour-terminals/


Приклад сценарій-два буде хорошим доповненням до цієї відповіді.
Ілля Лінн

5

Я надам додаткову відповідь, яка стосується лише ваших додаткових експериментів, наскільки вони стосуються соляризованих кольорів каталогів .

Налаштування

У нас той самий колір виводиться з тестового сценарію. Єдина відмінність полягає в тому , що я використовував lxterminalна Openbox з тонким , xcompmgr і без СД. Тому я не можу легко встановити власну палітру, як ви зробили, оскільки цей емулятор термінала не пропонує ці налаштування в графічному інтерфейсі, і для нього немає певної теми (вони існують лише для декількох емуляторів терміналів). Тож я просто використовую кілька напівпрозорих, незабарвлених терміналів та блакитний колір переднього плану із синім фоном Gentoo . Оскільки я не можу використовувати ансі версії кольорових файлів, я зосередився виключно на отриманні результатів, dircolors.256darkтобто "деградованої" простої версії.

Я використовував таку відповідну конфігурацію та невтішний середній шрифт:

echo $TERM
xterm

.bashrc:
eval `dircolors /path/to/dircolors.256dark`

.vimrc:
set t_Co=256
let g:solarized_termcolors=256
syntax enable
set background=dark
colorscheme solarized

.tmux.conf:
nothing at all related to colors!
start tmux with "tmux -2"

Декоратори

На зображенні нижче показано, що відбувається як зсередини tmux, так і зовні з цими налаштуваннями. У першій третині зліва видно неокрашені вікна, розташовані вертикально (3). Праворуч у вас є збірка tmux з однаковими однаковими програмами (3) Я також включив соляризований xterm1, який відображає нано, використовуючи файл .Xresources, включений у повний пакет (і вибірку його з xrdb -load ~/.Xresources):

введіть тут опис зображення натисніть правою клавішею миші / перегляньте зображення, щоб оглянути повне дозвіл

Перший термінал у верхньому лівому куті демонструє кольори каталогів за замовчуванням. Знизу - деградована соляризована версія. За винятком рожевого на синьому фоні для .cфайлів, які я додав, він ідентичний тому, що очікується від цього (див. Зображення нижче для посилання). У порівнянні з типовими значеннями, він додатково спирається на розширені атрибути, тобто жирний / світлий / зворотний тощо, і кольори очевидно відрізняються. Призначення кольору за замовчуванням для .txtфайлів у багатьох дистрибутивах - це зелений, але він повинен бути сірим, коли соляризований . ANSI файл рендеринга .txt файл як зелений або не робить правильно чи не чинить взагалі. Праві ручні результати, які ви показали, - це правильні (256 знаків) стосовно наступних посилань:

введіть тут опис зображення соляризована "деградована" двоколірна довідкова карта

Спостереження

З використанням конфігурації, яку я використовував, результати виглядають однаковими всередині та зовні tmux (я перевернув коментарі (#) у vi, але в іншому випадку плагін поводиться як слід, і мультиплексор не впливає на це). Шрифти відіграють величезну роль у визначенні соляризованих функцій, і для максимізації роботи потрібен гарний шрифт. У соляризації кольору каталогу з допомогою 256dark файлу відповідати посиланням і не вимагає спеціальної установки емуляції терміналу.


Висновок

Насправді анс- рендерінг кольорів каталогів просто зовсім відрізняється від деградованого соляризованого (256dark). Настільки, що під файлами ansi .txt зелений колір. Один не може бути використаний для перевірки візуалізації іншого. Обидва рішення потребують різної конфігурації та дають абсолютно різні результати.


"Я не розумію вашого висновку щодо того, що не приділено великої уваги кодуванню 256dark, де насправді це єдиний кольоровий файл, який дає соляризований список каталогів?" Моя плутанина виникає через те, що я розглядав ansi-darkяк правильний вихід (оскільки він використовує недеградовану версію). Тоді, якщо ви вважаєте висновок виводу 256dark, то у вас є зворотний спосіб мислення.
Atcold

"З використанням конфігурації, яку я використовував, результати виглядають однаковими всередині та зовні tmux" Звичайно, якщо ви використовуєте 256 кольорів, то, звичайно, вони будуть відображатися так само, де б ви не мали 256 кольорів підтримки. "Не ясно, що б далі запропонувати рішення в цьому контексті ..." Результатом було б істинне соляризація їх (замість наближення).
Atcold

Я розумію. Я не досліджував ансі частину насправді, тому я не міг зрозуміти, звідки ви родом. У будь-якому випадку, я знайшов ваш Q цілком сприятливим для вас. Можливо, я буду використовувати vi більше зараз, коли мені здається, що це досить lol. Що стосується результатів ансі, то фактично зараз я бачив, як це виглядає ... вони демонструють лише це для dir-кольорів тут . Чому ч. чи мають вони різні кодування під цим ... я маю на увазі, бачу .txt green ... як сірий близько до зеленого? Я не розумію їх проект серйозно.

Так, я зв’язався з автором особисто, і відповідь полягає в тому, що "це було його особистим налаштуванням, оскільки йому це подобалося". Я без мови ... Я радий, що мій Q комусь допоміг :)
Atcold
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.