在使用 curses 库时,我发现如果使用 init_color 更改默认颜色(例如 COLOR_BLUE),如果我不重置它,则在停止和重新启动程序期间将继续使用更改的颜色回到原来的定义。即使创建一个新的终端窗口来运行程序,蓝色也会显示为原始窗口中定义的颜色。它甚至可以在运行一个完全不同的程序时幸存下来。
这是怎么回事?我原以为在启动新实例时会使用原始定义。我只能猜测这些默认颜色缓存在操作系统级别的某个地方。有人可以解释这里发生的事情导致这种情况发生吗?
我在 Centos 7.6 发行版上运行它。
答案 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) 时,您必须记住,它不会获得此类更新: