更改 curses 中的默认颜色

Changing a default color in curses

在使用 curses 库时,我发现如果使用 init_color 更改默认颜色(例如 COLOR_BLUE),则更改后的颜色将在停止和如果我不将其重置回其原始定义,则重新启动我的程序。即使创建一个新的终端 window 在其中 运行 程序,蓝色也会按照原始 windows 中的定义显示。它甚至在 运行 一个完全不同的程序中幸存下来。

这是怎么回事?我原以为会在启动新实例时使用原始定义。我只能推测这些默认颜色缓存在 OS 级别的某个地方。有人可以解释这里发生的事情吗?

我运行在 Centos 7.6 发行版上安装它。

给定终端的颜色是 maintained/cached/whatever。

如果terminal description有这个功能:

      orig_colors                 oc        oc     Set all color pairs
                                                   to the original ones

ncurses 库将作为 exiting curses mode 的一部分发送。

它也 可能 作为 rs1 字符串的一部分由 reset (or tput reset) 命令发送。这不是自动的(除了作为初始化和重置字符串的副作用之外,这些命令对颜色没有任何特殊作用)。

xterm 支持将调色板重置为默认值的控制序列,该控制序列已添加到

中的终端描述中

2016-04-23
# + add 'oc' capability to xterm+256color, allowing palette reset for
# xterm -TD

指的是:

oc=\E]104[=11=]7,

使用 OSC 104,它是在 patch #252 (2009/12/7) 中为 xterm 开发的:

add OSC 104, for resetting ANSI/16/88/256 colors to default.

但是,在讨论 CentOS (RHEL) 时,您必须记住,它不会获得诸如此类的更新:

  • 软件包信息说它有 8 years ago 几天前的 ncurses 开发快照。
  • 您的终端may/may不支持控制序列。如果您使用的是 xterm,没问题。对于其他任何事情(使用那个版本的 CentOS),你都不走运了。 VTE 开发人员(例如 gnome-terminal)复制了 January 2014 中的功能,但是 版本的 VTE 发布为 0.35.2 , 而 CentOS 7 有 0.28.2