你能用vt100转义码c ++

时间:2015-09-11 12:32:11

标签: c++ colors vt100

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

3 个答案:

答案 0 :(得分:0)

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来自提供的表。看起来'm'是颜色编号后面的必填字符。

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

答案 1 :(得分: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

答案 2 :(得分:0)

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

OP问题中的颜色序列在Control Functions for Coded Character Sets中粗略记录为SGR(选择图形再现)控制序列的值。这些以及xterm 256色扩展名记录在 XTerm Control Sequences 中。互联网上有很多地方可以找到有关这些控制序列的信息,而不是所有这些都是有用的信息来源。