我在“Windows 10”系统中使用“Windows Terminal”。最近我注意到在某些命令行应用程序中,部分消息会消失。
事实证明,例如,某些命令行应用程序的作者会以不同的颜色(包括黑色)向控制台输出消息。同时,在某些“Windows 终端”配色方案中,黑色与背景颜色相匹配。因此,黑色文本会与背景融合并“消失”。
示例 1. 颜色方案:Campbell
,黑色:#0C0C0C
,背景:#0C0C0C
。一些 HTML 元素是不可见:
示例 2. 颜色方案:One Half Dark
,黑色:#282C34
,背景:#282C34
。一些 HTML 元素是不可见:
示例 3. 颜色方案:Campbell Powershell
,黑色:#0C0C0C
,背景:#012456
。所有 HTML 元素都是可见的:
我的问题:
- 更正确的是:应用程序开发人员不应该在其应用程序中使用黑色,还是用户应该更改“Windows 终端”的配色方案?
(在第一种情况下,我会在‘GitHub’上向开发人员写一个问题,在第二种情况下,我会自己更正‘Windows 终端’的配色方案。)
- 如果配色方案需要更改,那么配色方案的作者为什么要设计黑色和背景搭配?是否有客观原因,还是一个错误?
(我知道如何改变配色方案,这不是问题。)
添加在“Windows Terminal”中,配色方案设置包括 16 个终端颜色槽(黑色、红色、绿色、黄色、蓝色、紫色、青色、白色;每种颜色都有明暗之分,一共有 16 种)和 4 个系统颜色槽(前景色、背景色、光标颜色、选择背景色)。如下所示:
问题是关于颜色槽(黑色槽和背景色槽)。据我了解,开发人员操纵槽,而实际颜色由配色方案设置。这就是冲突产生的地方。
在我看来,如果配色方案在这 20 个位置设置不同的值,那么文本无论如何都不会“消失”。因为如果所有颜色都不同,那么它们都无法与其他颜色混合。唯一的问题是为什么配色方案的作者不这样做。
加法 2。@zadjii写道
在 2018 年之前,Windows 控制台根本不支持单独的背景颜色。BG 必须是颜色表的 16 种颜色之一(通常为黑色)。因此 Campbell(控制台的更新配色方案)没有单独的 BG 值。
如果是这样,那么答案是黑色和背景颜色的重合是过时程序的遗留问题。
答案1
为什么“Windows 终端”中的某些配色方案中黑色与背景颜色相匹配?
在终端诞生之初,它们都是物理设备,而不是像现在这样的终端仿真器。当时,终端的调色板通常由终端制造商决定。在许多终端中,为颜色分配了 3 位在 RGB 颜色模型中,这 3 位中的每一位都与其分量相对应:R、G 和 B。结果如下:
000 #000000 black
001 #0000ff blue
010 #00ff00 green
011 #00ffff cyan
100 #ff0000 red
101 #ff00ff magenta
110 #ffff00 yellow
111 #ffffff white
在采用这种调色板的终端中,只有 8 种颜色可用。默认背景颜色和默认文本颜色只能由终端用户选择其中一种颜色。黑色和白色最适合这个角色,因为它们是对比度最高的颜色对(21:1)因此,他们通常这样配置:
000 #000000 black (default background)
001 #0000ff blue
010 #00ff00 green
011 #00ffff cyan
100 #ff0000 red
101 #ff00ff magenta
110 #ffff00 yellow
111 #ffffff white (default foreground)
这个方案是在ECMA-48 标准(20 世纪 70 年代末),后来传入终端仿真程序并一直存活至今。
到目前为止,已经有许多终端仿真程序实现了 16 种颜色的调色板,默认背景颜色和默认文本颜色都是从这 16 种颜色中选择的:
black (default background) | bright (bold) black
blue | bright (bold) blue
green | bright (bold) green
cyan | bright (bold) cyan
red | bright (bold) red
magenta | bright (bold) magenta
yellow | bright (bold) yellow
white (default foreground) | bright (bold) white
大多数配色方案都考虑到了这种色调。
在许多现代终端仿真器(包括“Windows 终端”)中,在 16 种颜色的调色板上添加额外的插槽已成为一种时尚。例如,在 Windows 终端程序(调色板有 18 个插槽)中:
black | bright (bold) black | default background
blue | bright (bold) blue | default foreground
green | bright (bold) green |
cyan | bright (bold) cyan |
red | bright (bold) red |
magenta | bright (bold) magenta |
yellow | bright (bold) yellow |
white | bright (bold) white |
人们正在将旧的系统配色方案转换为“Windows 终端”配色方案。因此,结果是“黑色”与“默认背景”匹配,“白色”与“默认前景”匹配。我认为我们需要等到配色方案的作者意识到应该在新程序的配色方案中考虑新的插槽。恕我直言:新的配色方案不应该将“黑色”与“默认背景”匹配,将“白色”与“默认前景”匹配。
更正确的是:应用程序开发人员不应该在其应用程序中使用黑色,还是用户应该更改“Windows 终端”的配色方案?
对此并没有固定的规则。各方可以自愿做出努力来确保文字和背景颜色不匹配。
作为控制台应用程序开发人员,我建议避免在程序中使用“危险的”插槽组合。不建议:
- ‘默认背景’ 上的‘黑色’文字
- “默认前景”文本在“白色”背景上
我建议“Windows Terminal”程序的配色方案作者考虑在该程序的调色板中添加额外的插槽。避免将“黑色”与“默认背景”匹配,将“白色”与“默认前景”匹配。