在运行时确定终端/TTY的背景颜色

11
使用chalk库为终端添加样式/着色。
import chalk from 'chalk';

如果我使用:

console.log(chalk.blue('foobar'));

在浅色背景的终端中,这样完全可读,但在深色背景的终端中则完全不可读。

是否有一种方法可以在运行时确定终端的背景颜色?


举个例子:

"npm notice" 日志级别就是这个问题的一个案例:

enter image description here

蓝色字体在黑色背景上难以辨认。


1
没有可移植的方法。对于xterm(以及一些模仿它的终端),有DECRQSS请求当前**SGR**设置。 - Thomas Dickey
1
看看这个是否有帮助 https://dev59.com/GXE95IYBdhLWcg3wAo9U? - Tarun Lalwani
1个回答

4
以下是关于终端tty环境下的通用答案,涉及ANSI Escape序列。为了使特定序列在所有配色方案中都能够清晰可读,请使用代码7反转视频来突出显示。

这样就不需要事先知道调色板并进行适应。

例如,在bash中使用反转视频:

echo -e "\033[7mHello world\e[0m"

这可以链接在一起,翻转视频,并有红色背景:
echo -e "\033[31;7mHello world\e[0m"

这将始终在任何背景下可读,就像此gif的第二行:

enter image description here

反向视频通常用作软件程序中的视觉辅助工具,以突出显示已进行的选择,以防止描述错误,其中对一个不是预期对象的意图执行操作。现代桌面环境更常见的做法是将背景更改为其他颜色,如蓝色,或使用半透明背景来“突出显示”所选文本。在理解ANSI转义序列的终端上,使用转义序列CSI7 m(等于SGR 7)激活反向视频功能。 https://en.wikipedia.org/wiki/Reverse_video

从我的回答中:如何在Linux中更改echo的输出颜色,这是一个关于ansi序列的问题,其中包含了很多信息。


2
如何使用粉笔来完成这个任务? - Lance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接