我很难尝试获得带有 ruby 和诅咒的纯白色(背景)和黑色(前景)文本。
用这段代码
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 颜色”的终端在被告知呈现粗体 时使用更强烈的前景 颜色。但是背景没有相应的解决方法。
但是,其中大多数还实现了 SGR 39 和 SGR 49,它们将前景和背景重置为其“默认”颜色。使用它会得到你原来的终端背景(这可能是你想要的)。这是 ncurses 的一项功能,称为 use_default_colors ,我看到的是 available in ruby .
使用该功能,您的示例将
- 调用 Curses.use_default_colors 方法,
- 不必费心(例如)创建颜色对,因为默认颜色对 0 会使用终端的默认颜色进行绘制。
- 其他颜色对(1 到最大对数)会像普通诅咒一样工作。
给出的示例使用颜色对 1。如果您使用的是默认颜色扩展,则可以使用 use_default_colors
方法初始化 Curses
。然后,使用默认颜色对 0,您会在大多数终端上看到原始终端颜色。无论 Ruby 包名为“curses”还是“ncurses”,此方法均来自底层 ncurses 库。
颜色对 0 是特殊的(参见 manpage )。您的应用程序无法将其设置为特定颜色。作为扩展,ncurses 提供了一种以有用的方式改变它的方法。
关于 ruby 诅咒 : how to get pure white,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33323516/