【发布时间】:2011-12-31 04:52:38
【问题描述】:
我正在开发一个 Ncurses 应用程序,它通过 init_color() 使用自己的调色板(假设 can_change_colors() 返回非零)。如果COLORS小于256,我只修改前8个颜色(假设COLORS至少是8个)。否则,我最多修改前 256 个。
ncurses 文档声称在stdscr 上调用endwin() 将重置调色板。但是,在 Gnome 终端中,我没有看到 Ncurses 恢复的调色板。相反,我上次使用的任何调色板都超出了我的应用程序。那么,我的第一个问题是为什么没有正确恢复调色板(其他所有内容——光标位置、屏幕文本等)。
我可以通过在启动时获取调色板并手动恢复它来解决这个问题(我知道这已经有问题了)。在成功调用start_color() 之后,我正在尝试使用color_content() 循环来执行此操作。不幸的是,这似乎返回了默认的 ncurses 调色板,而不是实际使用的调色板(使用 Gnome 终端的默认调色板和配置的 Solarized 调色板进行测试)。我已经通过检查来自 Debian 的 ncurses-5.9 来源的 ncurses/base/lib_color.c 中的值来验证这一点。
所以:
为什么没有通过成功调用
endwin(stdscr)来恢复调色板?如何在启动时获得“真正的”调色板? Ncurses 是首选,但 Unix 甚至 Linux 特定的
ioctl()s 等现在就足够了。
相关代码可以在on Github找到。目前有什么可能与我上面描述的不完全匹配,因为我一直在尝试各种技术但没有成功。
【问题讨论】:
-
您是否在其他终端仿真器(例如 xterm 或控制台)中尝试过此操作,以确认您不只是从 gnome-terminal 看到不正确的行为?
-
因此,随着今天的赏金到期,我已经继续进行了一些彻底的来源潜水。我相信我有(相当令人沮丧的)答案:
标签: unix user-interface ncurses