Я разрабатываю приложение Ncurses, которое использует свою собственную палитру через init_color ()
(при условии can_change_colors ()
вернул ненулевое значение). Если COLORS
меньше 256, я изменяю только первые 8 цветов (предполагая, что COLORS
не меньше 8). В противном случае я изменяю до первых 256.
В документации ncurses
утверждается, что вызов endwin ()
на stdscr
сбросит палитру. Однако в Gnome-terminal Я не вижу палитру, восстановленную Ncurses. Вместо этого палитра, которую я использовал в последний раз, переносится за пределы моего приложения. Тогда мой первый вопрос: почему палитра не восстанавливается должным образом (все остальное - расположение курсора, текст на экране и т. Д. - есть).
Я мог бы обойти это (я знаю, что это уже сомнительно), получив палитру при запуске и восстановив ее вручную. Я пытаюсь сделайте это с помощью цикла color_content ()
после успешного вызова start_color ()
.К сожалению, это, похоже, возвращает палитру ncurses по умолчанию, а не фактически используемую палитру (проверено с палитрой по умолчанию Gnome-terminal и настроенной палитрой Solarized). Я проверил это, сравнив значения в ncurses / base / lib_color.c
из исходников Debian ncurses-5.9.
Итак:
Почему палитра не восстанавливается при успешном вызове endwin (stdscr)
?
Как я могу получить «истинную» палитру при запуске? Ncurses является предпочтительным, но на данный момент достаточно ioctl ()
s и т. Д. Для UNIX или даже Linux.
Соответствующий код можно найти на Github . То, что там сейчас, может не совпадать с тем, что я описал выше, поскольку я безуспешно экспериментировал с различными техниками.