На самом деле (при работе с ncurses 6.1 development) я не вижу сбоя от init_extended_pair
. На первый взгляд проблема заключалась в следующем:
attron(COLOR_PAIR(pair3));
mvprintw(4, 1, "pair32767");
attroff(COLOR_PAIR(pair3));
Те attron
/ attroff
являются устаревшими функциями . Вы должны использовать attr_on
и attr_off
. Форма macro attron
и attroff
(которая обычно используется вместо функции ) равна
#define wattron(win,at) wattr_on(win, NCURSES_CAST(attr_t, at), NULL)
#define wattroff(win,at) wattr_off(win, NCURSES_CAST(attr_t, at), NULL)
Но в любом случае данные «одинаковы»: что вписывается в attr_t
(32-битное значение). В некоторых других функциях цветовая пара пропускается отдельно, а ncurses 6.1 предусматривает передачу пар размером более 16 бит с помощью параметра opts . Эти конкретные функции не расширяются таким образом.
Однако ваша программа возвращает ошибку для init_extended_pair
. Это может быть любой из (нескольких) возвратов от _nc_init_pair
, но основной из них использует ValidPair
:
#define ValidPair(sp,pair) \
((sp != 0) && (pair >= 0) && (pair < sp->_pair_limit) && sp->_coloron)
Чтобы проверить это, я запустил код для текущих ncurses6 с TERM=xterm-256color
и TERM=xterm-direct
. Оба работали, хотя init_extended_color
в последнем отказывает (как и ожидалось). Я вижу , что не работает, скомпилировав ncurses с TRACE
, и включив трассировку с NCURSES_TRACE=0x220
. Вот скриншот трассировки, например:
Текущий код доступен на домашней странице ncurses ( здесь ). Если вы можете воспроизвести проблему, используя текущий код, вы можете обсудить ее в списке рассылки bug-ncurses . В противном случае (см. Список рассылки), пакет Debian является ссылкой на версию, которую вы используете.