使用 Windows 终端时,Ansi 40(黑色背景)在 WSL 中不起作用

使用 Windows 终端时,Ansi 40(黑色背景)在 WSL 中不起作用

不确定这里是不是合适的提问地点,但我正试图跑步建筑与结构工程微软终端并按照我实际的 Arch 安装进行样式设置。我正在尝试“移植”base16 平板灯到终端。

这是我制定的配色方案:

{
    "background": "#ECF0F1",
    "black": "#2C3E50",
    "blue": "#3498DB",
    "brightBlack": "#95A5A6",
    "brightBlue": "#3498DB",
    "brightCyan": "#1ABC9C",
    "brightGreen": "#2ECC71",
    "brightPurple": "#9B59B6",
    "brightRed": "#E74C3C",
    "brightWhite": "#ECF0F1",
    "brightYellow": "#F1C40F",
    "cyan": "#1ABC9C",
    "foreground": "#7F8C8D",
    "green": "#2ECC71",
    "name": "Flat Light",
    "purple": "#9B59B6",
    "red": "#E74C3C",
    "white": "#e0e0e0",
    "yellow": "#F1C40F"
}

现在我的问题是黑色要么是透明的(不存在),要么与背景颜色相同。

不是黑色背景

从图像中可以看出,背景以及 admin@...(通常也是黑色)不是黑色,即使我在 Arch 安装上运行相同的命令,它的颜色也与字体颜色相同。

答案1

首先,您使用的 Windows Terminal 程序是 BETA 版。错误是意料之中的事情,您显然也发现了一个……或者没有……见仁见智。

看来终端通过将背景重置为该终端的默认背景来响应黑色代码。我认为这是 posix 标准的缺陷,但这取决于给定终端如何显示颜色。所以可能不是。不是我的战争。

还有一件事..在Linux终端中,不要使用转义码,使用 linux 命令 输出。它不会那么混乱,至少留下了一层来处理终端兼容性。对于不支持颜色的术语,您的代码将被删除。赢了,赢了。

我刚刚测试时发现,Microsoft 终端响应大量颜色,BLACK 为 0 表示前景,为 16(是的,16)表示背景。如果使用 0,您将恢复原始背景颜色。

以下代码片段展示了新终端支持的一些颜色。您必须将终端拉宽,才能使格式不至于太差。

    for fg_color in {0..7}; do
        set_foreground=$(tput setaf $fg_color)
        for bg_color in {0..16}; do
            set_background=$(tput setab $bg_color)
            echo -n $set_background$set_foreground
            printf ' F:%s B:%s ' $fg_color $bg_color
        done
        echo $(tput sgr0)
    done

以下是我的显示屏上显示的内容。第一个索引显示为黑色,因为这是该终端的默认设置 在此处输入图片描述

我本来想把范围扩大一点,以显示所有可能的颜色,但我懒得编写所需的列格式。

我希望这有帮助。

相关内容