Ruby curses: 如何获得纯白色

3

我在使用 ruby 和 curses 时,无法得到纯白色(背景)和黑色(前景)文本。

使用以下代码:

Curses.init_pair(1,COLOR_BLACK,COLOR_WHITE) 
Curses.attron(Curses.color_pair(1))
Curses.stdscr.addstr str
Curses.attroff(Curses.color_pair(1))

我在灰色背景上看到黑色文本(截图中的最后三行)

我可能做错了什么?我尝试从iterm2切换到mac终端,但结果还是一样。

screenshot

1个回答

0

大多数实现“ANSI颜色”的终端在被告知渲染“粗体”时使用更强烈的前景颜色。但是,对于背景没有相应的解决方法。

然而,其中大部分也实现了SGR 39和SGR 49,它们将前景和背景重置为其“默认”颜色。使用这个功能可以获得您原始的终端背景(这很可能是您想要的)。这是ncurses的一个特性,称为use_default_colors,我看到它在ruby中可用

使用该功能,您的示例将会:

  • 调用Curses.use_default_colors方法,
  • 不需要(例如)创建颜色对,因为默认对0将使用终端的默认颜色进行绘制。
  • 其他颜色对(从1到最大数量的对)将像常规curses一样工作。
给定的示例使用了颜色对1。如果您使用了默认颜色扩展,您可以使用use_default_colors方法初始化Curses。然后,使用默认颜色对0,在大多数终端上您将看到原始终端颜色。该方法来自底层ncurses库,无论Ruby包是否称为“curses”或“ncurses”。
颜色对0很特殊(请参见 manpage)。您的应用程序不能将其设置为特定颜色。作为扩展,ncurses提供了一种有用的方式来改变它。

我实际上正在使用 use_default_colors,因为如果不使用它,Ruby 会默认使用反转的颜色方案。但即便使用了 use_default_colors,问题仍然存在。此外,我正在使用 Curses,而不是 ncurses。 - american-ninja-warrior
Ruby使用任何可能存在的“curses”实现。 除了NetBSD(受ncurses启发),任何使用use_default_colors的地方都是ncurses。但是,正如注意到的那样,只有颜色对0受到该功能的影响。而您的示例没有使用它。 - Thomas Dickey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接