has_colors () из ncurses возвращает false.В чем проблема? - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу использовать атрибуты цвета в режиме ncurses.Но, как указано в теме, has_colors() возвращает false, что означает, что терминал не поддерживает манипулирование цветом.Но используя printf() и цветные коды ANSI (не в режиме ncurses), я могу печатать цветные тексты.Я думаю, это означает, что терминал поддерживает манипулирование цветом.Я ошибся?В чем проблема?

Это код, который я использую:

int main()
{
    initscr();

    if (has_colors() == false)
    {
        endwin();
        printf("No color support!\n");
        return -1;
    }

    start_color();
    init_pair(1, COLOR_RED, COLOR_BLACK);

    attron(COLOR_PAIR(1));
    printw("This is a test!");
    attroff(COLOR_PAIR(1));

    endwin();

    return 0;
}

1 Ответ

0 голосов
/ 15 февраля 2019

Конфигурация терминала в ncurses происходит из двух разновидностей, в зависимости от того, была ли ncurses скомпилирована с поддержкой terminfo или termcap.

В любом случае, has_colors() - это функция, которая обращается к базе данных curses (терминал управляет базой данныхв зависимости от поведения вашего терминала) в зависимости от значения, которое вы используете для переменной окружения TERM.

В значение xterm можно не включать элементы управления цветом и, вероятно, то, что делает программное обеспечение вашего терминала не способнымотображать цвета.Просто измените переменную TERM на что-то вроде:

TERM=xterm-color

и попробуйте снова.Это определение терминала включает поддержку цвета и заставляет has_colors() возвращать true.

...