我可能还没有找到最好的标题。我并不是真的在寻求帮助,因为我可以完成我想要的事情。我只是想知道我是否理解正确。但请您亲自看看:
我可以在我的白蚁配置文件中设置 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
.