这两个脚本位于http://gist.github.com/50692.ansi.rb脚本显示所有256种背景颜色的所有256种颜色. ncurses.rb脚本显示所有256种前景色,但背景显示基本色16,然后似乎循环浏览各种属性,如闪烁和反向视频.
什么给出了什么?这是ncurses中的错误,它使用有符号整数来表示颜色对吗? (即’tput colors’表示256但’tput对’表示32767而不是65536)似乎是这样的情况下,前半部分颜色对会正确显示,但后半部分会重复或进入属性作为int包装.
解决方法
这非常不幸,我计划在我的程序中使用队列来使用init_pair()动态定义颜色,并且只是覆盖最近最少使用的对作为折衷.我写了ncurses维护者Thomas Dickey,询问是否有办法暂时走出ncurses,编写原始终端代码,然后返回ncurses.这是他的回答:
Essentially you’d have to forget about screen-optimization and just do
your own drawing using the functions listed in terminfo(3),e.g.,
tigetstr,mvcur,tputs.You can exit temporarily from ncurses,but then have to repaint the
screen. Otherwise ncurses will be confused about what is on the screen
and where the cursor is.
这个解决方案似乎存在太多陷阱,但是如果你在ncurses程序中绝对需要超过256个并发对(不计算你可以使用inverse属性伪造的对),那么这就是你必须要做的.