更改诅咒中的默认颜色



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

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

我在Centos7.6发行版上运行这个。

颜色由给定的终端维护/缓存/任何东西。

如果终端描述具有此功能:

orig_colors                 oc        oc     Set all color pairs
to the original ones

它将由ncurses库作为退出curses模式的一部分发送。

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

xterm支持将选项板重置回默认值的控制序列,该序列已添加到中的终端描述中

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

指的是:

oc=E]10407,

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

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

然而,在讨论CentOS(RHEL(时,您必须记住,它不会更新以下内容:

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

最新更新