ruby – 256色,前景和背景
这是两个脚本的故事,与
previous question相关.
这两个脚本位于http://gist.github.com/50692.ansi.rb脚本显示所有256种背景颜色的所有256种颜色. ncurses.rb脚本显示所有256种前景色,但背景显示基本色16,然后似乎循环浏览各种属性,如闪烁和反向视频. 什么给出了什么?这是ncurses中的错误,它使用有符号整数来表示颜色对吗? (即’tput colors’表示256但’tput对’表示32767而不是65536)似乎是这样的情况下,前半部分颜色对会正确显示,但后半部分会重复或进入属性作为int包装. 解决方法
原因是因为ncurses在ABI 6之前,其中包括大多数发行版包括Debian和Amazon AMI使用的当前版本,COLOR_PAIR(n)不能引用256以上任何已定义的对.这是因为COLOR_PAIR(n)的参数是cchar_t类型.低8位选择颜色对,其余的被视为对特定终端属性进行OR运算.这就是当您尝试超出示例代码中的第255对时,您会看到闪烁,反转,下划线等的原因.
这非常不幸,我计划在我的程序中使用队列来使用init_pair()动态定义颜色,并且只是覆盖最近最少使用的对作为折衷.我写了ncurses维护者Thomas Dickey,询问是否有办法暂时走出ncurses,编写原始终端代码,然后返回ncurses.这是他的回答:
这个解决方案似乎存在太多陷阱,但是如果你在ncurses程序中绝对需要超过256个并发对(不计算你可以使用inverse属性伪造的对),那么这就是你必须要做的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |