微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.这是他的回答:

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属性伪造的对),那么这就是你必须要做的.

原文地址:https://www.jb51.cc/ruby/264544.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐