Ruby诅咒:如何获得纯白

Ruby curses: how to get pure white

我很难尝试使用 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 终端 还是一样

大多数实现 "ANSI color" 的终端在被告知呈现 粗体 时使用更强烈的 前景 颜色。但是 background.

没有相应的解决方法

但是,其中大多数还实现了 SGR 39 和 SGR 49,它们将前景和背景重置为其 "default" 颜色。使用它会得到你原来的终端背景(这可能是你想要的)。这是 ncurses 的一个特性,叫做 use_default_colors, which I see is available in ruby.

使用该功能,您的示例将

  • 调用Curses.use_default_colors方法,
  • 不必费心(例如)创建颜色对,因为默认颜色对 0 会使用终端的默认颜色进行绘制。
  • 其他颜色对(1 到最大对数)会像普通诅咒一样工作。

给出的示例使用颜色对 1。如果您使用的是默认颜色扩展,则可以使用 use_default_colors 方法初始化 Curses。然后,使用默认颜色对 0,您会在大多数终端上看到 original 终端颜色。此方法来自底层 ncurses 库,无论 Ruby 包被称为 "curses" 还是 "ncurses".

颜色对 0 很特殊(参见 manpage)。您的应用程序无法将其设置为特定颜色。作为扩展,ncurses 提供了一种以有用的方式改变它的方法。