Возникли проблемы с определением значений цвета с помощью init_color ();в курсах в с - PullRequest
0 голосов
/ 12 апреля 2019

Я использую init_color(); в ncurses в C, чтобы попытаться определить новые значения цвета RGB. Однако init_color(); не вступает в силу и не меняет цвета по умолчанию после запуска программы.

Я пытался передвигаться по операторам init_color(); до и после операторов init_pair(); и start_color();, но безуспешно. Я также попытался использовать другие значения (ASCII и числа из других источников) вместо ex. COLOR_MAGENTA, за первый аргумент в одном из операторов init_color();, но тоже не повезло. Мои операторы start_color();, init_color(); и init_pair(); находятся внутри основной функции перед остальной частью программы. Мой терминал (использующий cloud9 / cs50) поддерживает 256 цветов (проверяется с помощью команд терминала). Также все определения цвета находятся выше функции 'main'.

int main(int argc, char *argv[])
{
    // ensure that number of arguments is as expected
    if (argc != 1)
    {
      fprintf(stderr, "Usage: ./lemonade\n");
      return 1;
    }

// start up ncurses
if (!startup())
{
    fprintf(stderr, "Error starting up ncurses\n");
    return 2;
}

// initialize colors
start_color();

// re-asign specific RGB value to colors
init_color(COLOR_MAGENTA, 254, 160, 207);
init_color(COLOR_GREEN, 37, 244, 82);
init_color(COLOR_BLUE, 96, 82, 186);

// used cyan for a different greeen
init_color(COLOR_CYAN, 46, 243, 74);

// used yellow for a grey
init_color(COLOR_YELLOW, 156, 156, 156);

// used red for a purple
init_color(COLOR_RED, 208, 196, 253);

// initilaize color pairs
init_pair(LOGO_PAIR, COLOR_MAGENTA, COLOR_GREEN);
init_pair(DRAWBORDERSSPECIAL_PAIR, COLOR_BLACK, COLOR_GREEN);
init_pair(BORDERS_PAIR, COLOR_WHITE, COLOR_BLACK);
init_pair(SPECIALNEXT_PAIR, COLOR_BLACK, COLOR_GREEN);
init_pair(SUNNYBLUE_PAIR, COLOR_WHITE, COLOR_BLUE);
init_pair(WEATHERGREEN_PAIR, COLOR_WHITE, COLOR_CYAN);
init_pair(CLOUDYGREY_PAIR, COLOR_WHITE, COLOR_YELLOW);
init_pair(HOTPURPLE_PAIR, COLOR_WHITE, COLOR_RED);

// clean
clean();            // clean includes (refresh(); and clear();)

// draw borders
drawborders();

// run screen 1
screenone();





// support color test                           
mvprintw(6, 50, "My terminal supports %d colors.", COLORS);

// has_color(); test    
if (has_colors() == FALSE)
{
    mvprintw(7, 50, "Your terminal does not support color \n");
}

// can_change_color(); test     
if (can_change_color() == FALSE)
{
    mvprintw(8, 50, "Can_change_color is false \n");
}

Я ожидал, что операторы init_color(); вступят в силу и изменят цвета по умолчанию (например, пурпурный, черный и т. Д.) На вновь назначенные конкретные значения RGB, но они останутся такими же после запуска программы.

Я добавил проверки к числу поддерживаемых цветов, has_colors(); и can_change_color();. Поддержка количества цветов возвращает 8, has_colors(); возвращает true, и, наконец, can_change_color(); возвращает false. Спасибо, что предложили использовать has_colors(); и can_change_color();, хотя, похоже, это проблема, я не уверен, куда идти дальше?

1 Ответ

0 голосов
/ 12 апреля 2019

Хм, я не вижу ваши звонки на has_colors() и can_change_color(), которые следует использовать, чтобы определить, разрешено ли вам сделать это в вашей системе?

Это первая вещь, которую вы должны проверять.Возможно, изменение цвета не разрешено в вашей среде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...