Я хотел бы изменить программу, чтобы автоматически обнаружить, способен ли терминал к цвету или нет, поэтому когда я запускаю, сказал, что программа из нецветного способного терминала (говорят, что оболочка 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.
$
который является... субоптимальным.
Друг указал мне на 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 .
Найдите запись terminfo (5) для типа терминала и проверьте запись Co (max_colors). Вот сколько цветов поддерживает терминал.