Чи є надійний спосіб перевірити, скільки кольорів підтримує мій емулятор терміналу?
Якщо echo $TERM
друкує xterm
, чи це однозначно підкаже, скільки кольорів підтримує мій емулятор терміналу? Як я міг достовірно перевірити цю інформацію?
Чи є надійний спосіб перевірити, скільки кольорів підтримує мій емулятор терміналу?
Якщо echo $TERM
друкує xterm
, чи це однозначно підкаже, скільки кольорів підтримує мій емулятор терміналу? Як я міг достовірно перевірити цю інформацію?
Відповіді:
Значення $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 не роблять.
Я не знаю більш прямого способу.
read -d $'\a' -s -t 1
робить?
\a
(символ дзвоника), не повторюючи вхід, із затримкою 1 секунди.
tput colors
запитує базу даних terminfo. Швидше за все, що у вас є TERM=xterm
. Xterm може підтримувати щонайменше 2, 8, 16, 88 або 256 кольорів залежно від версії та параметрів компіляції та виконання, але база даних terminfo може зберігати лише одне значення. Ви можете встановити, наприклад TERM=xterm+256color
, але тоді ви будете роздратовані, коли будете входити в машину, у якої немає цієї записи в його базі даних termcap / terminfo.
printf … >/dev/tty
), а потім прочитати з терміналу ( read … </dev/tty
). Xterm відповідає на OSC 4; …; ? BEL
послідовність шляхом введення натискань клавіш.
Існує сценарій perl, 256colors2.pl , який відображатиме всі кольори на вашому терміналі.
Можна використовувати
$ tput colors
На моїй установці debian tput є частиною ncurses-bin
пакету, який встановлений за замовчуванням.
TERM
, а не скільки кольорів він може насправді підтримувати за умови відповідногоTERM