使用 256 颜色转义序列时 ls --color 是否会回退到预编译的 LS_COLORS?

使用 256 颜色转义序列时 ls --color 是否会回退到预编译的 LS_COLORS?

我可能还没有找到最好的标题。我并不是真的在寻求帮助,因为我可以完成我想要的事情。我只是想知道我是否理解正确。但请您亲自看看:

我可以在我的白蚁配置文件中设置 256 种颜色,如下所示:

colorx = #xxxx

例如:

color255 = #8fa200

呈现出漂亮的绿色。

它们可通过 .dircolors 文件用于 LS_COLORS,语法如下:

<filetype> <effects>38;5<foreground>;48;5;<background>

例如:

DIR 04;38;5;255

对于带下划线的目录,使用指定的绿色。显然这适用于 X。现在关于 tty,我得到了目录的标准蓝色色调。我可以影响 .bashrc 中条目使用的实际颜色,例如:

echo -en "\e]PCffa500"

我可以用它在整个系统中拼凑出非常一致的配色方案。

问题是:我的理解是否正确,因为我对 X 使用 256 种颜色描述,所以 ls --colors=auto 会回退到预编译的 dircolors?或者实际上有另一个机制在控制它?因此也许可以进行更细粒度的控制。

期待学习您的智慧...

答案1

GNU 语言对终端的控制序列一无所知。它只是将$TERM环境变量与其表相关联(无论是来自$LS_COLORS环境变量还是其编译的默认值都没有多大关系)。 没有任何其中告诉它终端有多少种颜色。

如果您阅读了源代码(dircolors.c,ls.c),您可能会注意到它不使用颜色数量来决定打印内容。它是否使用 256 色的转义序列似乎取决于打包者是谁(它不在 coreutils 源代码中,尽管评论暗示了这种可能性)。

它不使用终端数据库;之间有任何相似之处GNU 语言基本上是后者使用终端描述的名称,而不使用相应的信息。所以它假装VT100s使用的颜色(参见ncurses 常见问题解答)。

自从编译入的值使用 8 色 ANSI(并假设粗体颜色添加另一个 8),如果您看到它使用 256 色,那是由于(外部到GNU 语言)配置文件设置在/etc.

相关内容