你可以使用带有 vt100 转义码的十六进制颜色值 c++

Can you use hex color values with vt100 escape codes c++

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

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

另请参阅此堆栈溢出 List of ANSI color escape sequences,其中有一些很好的答案。

ANSI/VT100 Terminal Control Escape Sequences 中的以下部分提供了一个示例。

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 tips: Colors and formatting (ANSI/VT100 Control Sequences 以获得包含更多链接的更详尽的列表。

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

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

你可以使用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

VT100 从未做过颜色(参见 ncurses FAQ How do I get color with VT100?). Regarding VT100's a useful source of information is http://vt100.net

Control Functions for Coded Character Sets as values for the SGR (select graphic rendition) control sequence. Those, as well as the xterm 256-color extension are documented in XTerm Control Sequences 中粗略记录了 OP 问题中的颜色序列。网上有很多地方可以找到关于这些控制序列的信息,但并不是所有的都是有用的信息来源。