Перевірка, скільки кольорів підтримує мій емулятор терміналу


21

Чи є надійний спосіб перевірити, скільки кольорів підтримує мій емулятор терміналу?

Якщо echo $TERMдрукує xterm, чи це однозначно підкаже, скільки кольорів підтримує мій емулятор терміналу? Як я міг достовірно перевірити цю інформацію?


4
Дивіться також: unix.stackexchange.com/questions/9957/…
jasonwryan

Відповіді:


20

Значення $TERMне дає великої інформації про кількість підтримуваних кольорів. Багато терміналів рекламують себе як xtermі можуть підтримувати будь-яку кількість кольорів (2, 8, 16, 88 і 256 - загальні значення).

Ви можете запитувати значення кожного кольору за допомогою OSC 4 ; c ; ? BEL керуючої послідовності . Якщо кольоровий номер cпідтримується, і якщо термінал розуміє цю послідовність керування, термінал відповість назад зі значенням кольору. Якщо кольоровий номер не підтримується або термінал не розуміє цю послідовність керування, термінал нічого не відповідає. Ось фрагмент bash / zsh для запиту, чи підтримується колір 42 (перенаправлення на термінал / з терміналу, якщо потрібно):

printf '\e]4;%d;?\a' 42
if read -d $'\a' -s -t 1; then … # color 42 is supported

Серед популярних терміналів, xterm та термінали на базі бібліотеки VTE (Gnome-термінал, Terminator, Xfce4-термінал,…) підтримують цю контрольну послідовність; rxvt, konsole, екран і tmux не роблять.

Я не знаю більш прямого способу.


Дякую @Gilles Це виглядає чудово. Чи можу я запитати, що read -d $'\a' -s -t 1робить?
Амеліо Васкес-Рейна

1
@intrpc Прочитайте вхід до першого \a(символ дзвоника), не повторюючи вхід, із затримкою 1 секунди.
Жил "ТАК - перестань бути злим"

5
@ l0b0 tput colorsзапитує базу даних terminfo. Швидше за все, що у вас є TERM=xterm. Xterm може підтримувати щонайменше 2, 8, 16, 88 або 256 кольорів залежно від версії та параметрів компіляції та виконання, але база даних terminfo може зберігати лише одне значення. Ви можете встановити, наприклад TERM=xterm+256color, але тоді ви будете роздратовані, коли будете входити в машину, у якої немає цієї записи в його базі даних termcap / terminfo.
Жил "ТАК - перестань бути злим"

2
@ l0b0 Ваша труба очевидно не має нічого спільного з терміналом. Вам потрібно надрукувати на терміналі ( printf … >/dev/tty), а потім прочитати з терміналу ( read … </dev/tty). Xterm відповідає на OSC 4; …; ? BELпослідовність шляхом введення натискань клавіш.
Жил "ТАК - перестань бути злим"



9

Можна використовувати

$ tput colors

На моїй установці debian tput є частиною ncurses-binпакету, який встановлений за замовчуванням.


6
Це лише інформує, скільки кольорів ваш термінал повідомляє навколишньому середовищу TERM, а не скільки кольорів він може насправді підтримувати за умови відповідногоTERM
MestreLion
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.