更改诅咒中的默认颜色

时间:2021-05-14 15:16:31

标签: ncurses curses xterm

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

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

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

1 个答案:

答案 0 :(得分:1)

颜色由给定的终端维护/缓存/无论如何。

如果 terminal description 具有此功能:

      orig_colors                 oc        oc     Set all color pairs
                                                   to the original ones

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

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

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

中的终端描述中 <块引用>

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

参考:

oc=\E]104\007,

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

<块引用>

添加 OSC 104,用于将 ANSI/16/88/256 颜色重置为默认值。

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

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