这是两个脚本的故事和涉及一种先前的问题

这两个脚本是在 http://gist.github.com/50692 。该ansi.rb脚本显示所有256种背景颜色全部256种颜色。所述ncurses.rb脚本显示所有256前景颜色,而背景显示基本16,然后通过各种属性似乎周期像闪烁和反白显示。

那么是什么原因?这是ncurses的,它使用的颜色对一个有符号整数的错误吗? (即“tput的颜色”说256,但“tput的对”说32767,而不是65536),好像如果是这样的话颜色对上半年将正常显示,但下半年会重复或进入属性为INT包裹物。

有帮助吗?

解决方案

的原因是因为ncurses的预ABI 6,其包括当前版本,大部分分布包括Debian和亚马逊AMI使用,COLOR_PAIR(n)不能引用上述256.任何定义的双这是因为参数COLOR_PAIR(n)是类型cchar_t的。低8位选择颜色对,其余都被视为对特定终端属性ORed在bitflags。这就是为什么你看到的闪烁,相反,下划线等,当你试图超越对数255在您的示例代码。

这是很不幸的,我打算使用一个队列在我的程序来定义使用init_pair()上飞的颜色,只是覆盖最近最少使用对作为妥协。我写的ncurses的维护者托马斯·迪基询问是否有一种方法步骤的ncurses之外暂时写入原始终端代码,然后返回到ncurses的。这是他的回答是:

  

从本质上讲,你不得不对屏幕优化忘记,只是做   自己的绘图用的terminfo(3),例如列出的功能,   tigetstr,mvcur,tputs。

     

您可以从ncurses的暂时退出,但后来不得不重绘   屏幕。否则ncurses的将是困惑的是在屏幕上   和光标所在。

该解决方案似乎存在太多陷阱,但如果你绝对在ncurses的程序需要超过256个同时对(不包括对你可以用假逆属性),那么这是你必须做的事情。

其他提示

我不知道红宝石可言,所以无法提供工作的例子,但ncurses.rb脚本应该告诉你,它是如此比ansi.rb脚本短得多的东西。

您不是要设置了颜色,所以它只是与循环利用的属性,如眨眼下划线,加粗等提供变化的默认16调色板。

您需要使用int init_color(short color, short r, short g, short b)来初始化与RGB值(0 - 1000)一个颜色索引。然后设置颜色对主叫int init_pair(short pair, short f, short b)之前用来与COLOR_PAIR(n)显示

有关可移植性应检查bool has_colors(void)bool can_change_color(void)

在我的系统的手册页的ncurses是非常宝贵的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top