Как я определяю, способен ли терминал к цвету?

Я хотел бы изменить программу, чтобы автоматически обнаружить, способен ли терминал к цвету или нет, поэтому когда я запускаю, сказал, что программа из нецветного способного терминала (говорят, что оболочка M-x в (X) Emacs), цвет автоматически выключен.

Я не хочу к hardcode, чтобы программа обнаружила ТЕРМИН = {emacs, немой}.

Я думаю, что termcap/terminfo должен смочь помочь с этим, но до сих пор мне только удалось починить этот (n) использующий проклятия отрывок кода, который перестал работать плохо, когда он не может найти терминал:

#include <stdlib.h>
#include <curses.h>

int main(void) {
 int colors=0;

 initscr();
 start_color();
 colors=has_colors() ? 1 : 0;
 endwin();

 printf(colors ? "YES\n" : "NO\n");

 exit(0);
}

Т.е. Я получаю это:

$ gcc -Wall -lncurses -o hep hep.c
$ echo $TERM
xterm
$ ./hep
YES
$ export TERM=dumb
$ ./hep           
NO
$ export TERM=emacs
$ ./hep            
Error opening terminal: emacs.
$ 

который является... субоптимальным.

28
задан asjo 17 March 2010 в 19:59
поделиться

2 ответа

Друг указал мне на tput (1), и я приготовил следующее решение:

#!/bin/sh

# ack-wrapper - use tput to try and detect whether the terminal is
#               color-capable, and call ack-grep accordingly.

OPTION='--nocolor'

COLORS=$(tput colors 2> /dev/null)
if [ $? = 0 ] && [ $COLORS -gt 2 ]; then
    OPTION=''
fi

exec ack-grep $OPTION "$@"

, которое у меня работает. Было бы здорово, если бы у меня был способ интегрировать его в ack .

21
ответ дан 28 November 2019 в 03:41
поделиться

Найдите запись terminfo (5) для типа терминала и проверьте запись Co (max_colors). Вот сколько цветов поддерживает терминал.

3
ответ дан 28 November 2019 в 03:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: