当前位置:  开发笔记 > 后端 > 正文

256种颜色,前景和背景

如何解决《256种颜色,前景和背景》经验,为你挑选了1个好方法。

这是两个脚本的故事,与之前的问题有关.

这两个脚本位于http://gist.github.com/50692.ansi.rb脚本在所有256种背景颜色上显示所有256种颜色.ncurses.rb脚本显示所有256种前景色,但背景显示基本色16,然后似乎循环浏览各种属性,如闪烁和反向视频.

什么给出了什么?这是ncurses中的错误,它使用有符号整数来表示颜色对吗?(即'tput colors'表示256但'tput对'表示32767而不是65536)似乎是这样的情况下,前半部分颜色对会正确显示,但后半部分会重复或进入属性作为int包装.



1> Andy..:

原因是因为包含Debian和Amazon AMI使用的大多数发行版的当前版本的ABI 6之前的ncurses COLOR_PAIR(n)不能引用256以上的任何已定义对.这是因为参数COLOR_PAIR(n)是类型的cchar_t.低8位选择颜色对,其余的被视为OR特定终端属性的位标记.这就是当您尝试超出示例代码中的第255对时,您会看到闪烁,反转,下划线等的原因.

这非常不幸,我打算在我的程序中使用队列来动态定义颜色,init_pair()并且只是覆盖最近最少使用的对作为折衷方案.我写了ncurses维护者Thomas Dickey,询问是否有办法暂时走出ncurses,编写原始终端代码,然后返回ncurses.这是他的回答:

基本上你不得不忘记屏幕优化,只使用terminfo(3)中列出的函数来做自己的绘图,例如tigetstr,mvcur,tputs.

您可以暂时退出ncurses,但必须重新绘制屏幕.否则,ncurses会对屏幕上的内容和光标位置感到困惑.

这个解决方案似乎存在太多陷阱,但是如果你在ncurses程序中绝对需要超过256个并发对(不计算你可以使用inverse属性伪造的对),那么这就是你必须要做的.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有