2

我刚刚学会了如何使用 vt100 转义码来更改终端(\033[30m\033[40m)中的背景和文本颜色。我想知道是否有一种方法可以使用十六进制颜色代码,而不是仅限于使用 30 - 37 或 40 - 47 所获得的 8 种颜色。类似:\033[#48FF1Fm. 如果这是不可能的,我不会感到惊讶,但我认为值得一问。

4

3 回答 3

0

VT-100 是一个旧终端,我很惊讶它有颜色的转义码!

另请参阅this stack overflow List of ANSI color escape sequences,其中有一些很好的答案。

ANSI/VT100 终端控制转义序列的以下部分提供了一个示例。

Set Attribute Mode  <ESC>[{attr1};...;{attrn}m
Sets multiple display attribute settings. The following lists standard attributes:
0   Reset all attributes
1   Bright
2   Dim
4   Underscore  
5   Blink
7   Reverse
8   Hidden

    Foreground Colours
30  Black
31  Red
32  Green
33  Yellow
34  Blue
35  Magenta
36  Cyan
37  White

    Background Colours
40  Black
41  Red
42  Green
43  Yellow
44  Blue
45  Magenta
46  Cyan
47  White

然而,它看起来不仅是您找到的标准颜色,根据设备支持,还有看起来像是调色板机制的东西。

但是,请参阅这篇文章Bash 提示:颜色和格式(ANSI/VT100 控制序列,以获得更详尽的列表以及其他链接。

对于 256 种前景色,转义序列为“[38;5;ColorNumberm”,其中颜色编号 ColorNumber 来自提供的表格。看起来“m”是颜色编号后的必需字符。

对于 256 种背景颜色,转义序列为“[48;5;ColorNumberm”。

于 2015-09-11T14:09:36.830 回答
0

您可以使用 24 位颜色(请注意,十六进制颜色不一定是 24 位,并且您不需要十六进制来表示 24 位颜色):

printf "\x1b[${bg};2;${red};${green};${blue}m\n"

例子:

printf "\x1b[38;2;255;100;0mTRUECOLOR\x1b[0m\n"

但是请注意,您的终端必须支持它(vt100 肯定不支持它,但某些软件终端仿真器支持)。

还有相当广泛支持的 256 色模式 - 如果您想要超过 16 种颜色,这可能是您最好的选择。

来源:

https://gist.github.com/XVilka/8346728

于 2015-09-11T14:09:58.457 回答
0

VT100 从来没有做过颜色(参见 ncurses FAQ How do I get color with VT100?)。关于 VT100 的有用信息来源是http://vt100.net

OP 问题中的颜色序列在编码字符集的控制函数中被粗略地记录为 SGR(选择图形再现)控制序列的值。这些以及 xterm 256 色扩展都记录在XTerm Control Sequences中。Internet 上有很多地方可以找到有关这些控制序列的信息,但并非所有地方都是有用的信息来源。

于 2015-10-07T09:37:14.730 回答