Есть ли надежный способ проверить, сколько цветов поддерживает мой эмулятор терминала?
Если 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, screen и 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