如何在 curses 中使用终端调色板

新手上路,请多包涵

我无法让终端调色板与 curses 一起使用。

 import curses

def main(stdscr):
    curses.use_default_colors()
    for i in range(0,7):
        stdscr.addstr("Hello", curses.color_pair(i))
    stdscr.getch()

curses.wrapper(main)

此 python 脚本产生以下屏幕:

在此处输入图像描述

但是,我的 gnome 终端调色板中确实有更多颜色。我怎样才能在 curses 中访问它们?

原文由 chtenb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 494
2 个回答

以下是我在自己的电脑(Ubuntu 14.04,python 3)上通过实验得出的结论。

  • 有 256 种颜色(由前 8 位定义)。
  • 其他位用于附加属性,例如突出显示。
  • 传递数字 -1 作为颜色回落到默认背景和前景色。
  • 颜色对 0 (mod 256) 固定在 (-1, -1) 上。
  • 颜色 0 到 15 是终端调色板颜色。

考虑以下测试代码。将此添加到您的 .bashrc

 # Set proper $TERM if we are running gnome-terminal
if [ "$COLORTERM" == "gnome-terminal" ]
then
    TERM=xterm-256color
fi

将其放入 python 文件中并运行它。

 import curses

def main(stdscr):
    curses.start_color()
    curses.use_default_colors()
    for i in range(0, curses.COLORS):
        curses.init_pair(i + 1, i, -1)
    try:
        for i in range(0, 255):
            stdscr.addstr(str(i), curses.color_pair(i))
    except curses.ERR:
        # End of screen reached
        pass
    stdscr.getch()

curses.wrapper(main)

运行它将产生以下输出。

截屏

如您所见,颜色对 1-16 是前景色的终端调色板。

原文由 chtenb 发布,翻译遵循 CC BY-SA 3.0 许可协议

终端“调色板”由终端应用程序本身设置,以将默认的 curses 颜色映射到特定于应用程序的“解释”。如果您使用红色,终端可以选择将其显示为勃艮第或樱桃红,或者如果用户愿意,可以选择完全不同的颜色。

换句话说,只需使用 curses 颜色(结合或不结合 bright 或 blink 修饰符),一切都应该正常工作。

我相信 curses.use_default_colors() 调用只会使透明度可用;它是对 use_default_colors() ncurses API 函数 的直接调用。 ncurses 颜色是基于调色板的;您需要使用 curses.init_pair() 调用 为每对编号设置自己的颜色属性,然后从调色板中选择一个颜色对 curses.color_pair() 以显示具有该特定对的文本;或直接为给定的 addstr() 调用构建文本属性。

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏