Определение способности терминала форматировать вывод?
Привет - Если я хочу определить количество цветов, которое может отображать терминал, я просто читаю вывод
tput colors
... однако я не могу понять, как определить, может ли терминал, на который я пишу, поддерживать другие запросы форматирования, такие как полужирный шрифт, подчеркивание, обратное видео, мигание (чёрт!).
Я вижу, как настроить вывод через tput, но не определить, существует ли такая возможность, прежде чем пытаться.
Должен ли я просто предположить, что такая возможность существует во всех терминалах?
3 ответа
Ты можешь использовать infocmp
для этого и grep
на возможности, которую вы ищете. Если результат найден, то возможность поддерживается:
infocmp | grep bold
bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=^M,
Чтобы получить названия различных возможностей, обратитесь к справочным страницам Linux для terminfo или к этой табличной схеме имен.
Там может быть более простой способ, но вы можете запросить базу данных terminfo, запустив
infocmp $TERM
чтобы увидеть полную запись для текущего терминала (замените $TERM
с именем любого поддерживаемого типа терминала). Возможно, вы захотите прочитать страницу руководства, чтобы выяснить, как создать вывод, наиболее легко анализируемый для вашей конкретной потребности.
Если вы попробуете tput
Команда с неопределенным атрибутом вернет ненулевой код выхода. Вы можете перенаправить нормальный вывод, если он есть, чтобы он не вступил в силу.
for attr in bold rev smul blink sshm
do
if ! tput "$attr" > /dev/null
then
echo "Attribute $attr is undefined"
fi
done
В противном случае, если вы grep
выход infocmp
, использовать -1
(это один) вариант для вывода атрибутов по одному на строку.
infocmp -1 | grep smul