Определение способности терминала форматировать вывод?

Привет - Если я хочу определить количество цветов, которое может отображать терминал, я просто читаю вывод

 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
Другие вопросы по тегам