有没有办法从ANSI转义字符创建橙色?

时间:2015-09-14 20:48:19

标签: ansi

我正在寻找一个控制代码,使用ANSI或其他标准在终端中创建橙色文本,这可能吗?我只看到黄色和红色可用,我不认为你可以为同一个角色混合红色和黄色:)

2 个答案:

答案 0 :(得分:9)

严格地说,不:ANSI从未标准化任何(对于终端的控制序列),称为“橙色”。有些终端可以做到这一点,但这不在标准范围内。

xterm(参见XTerm Control Sequences)使用“ANSI”之后的控制序列(实际上很久以前从标准化中退出)ECMA-48语法。

  • 其中一些是通过SGR标准的8种颜色(不包括橙色)。
  • 它(使用aixterm SGR 扩展名)还添加了8种颜色。仍然没有橘子。
  • 然而,xterm扩展(以不完全标准的方式)SGR代码38和48以使用RGB(红色/绿色/蓝色)值提供颜色调色板。最大调色板大小编译为88或256色。

橙色可以由RGB代码组成。例如,X的rgb.txt文件将其定义为

255 165   0             orange

(鲜红色加上适度亮绿色)。要在shell脚本中获取它,可以使用

#!/bin/sh
printf "\033[48:2:255:165:0m%s\033[m\n" "Hello world"
printf "\033[48;2;255;165;0m%s\033[m\n" "Hello world"

这两行之间的区别在于使用冒号作为参数分隔符(ECMA-48有一些措辞,对于xterm中使用的子参数,这在早期被忽略了)。为了兼容性(包括从xterm的早期实现中复制的终端),xterm尊重这两者。

xterm还支持称为动态颜色的“非ANSI”方案,该方案接受颜色名称,但它设置整个屏幕的文本颜色。

最后,xterm可以为显示分配颜色,而不是闪烁,粗体,斜体,反向和下划线(例如,参见colorBD的讨论)。这是通过X资源设置完成的(在转义序列的帮助下)。分配给这些资源的颜色可以通过相同的88/256颜色扩展设置。

答案 1 :(得分:1)

256个调色板使用起来比较容易一点,并且有很多橙色:

printf "\033[48:5:208:0m%s\033[m\n" "Hello world"  # bright orange
printf "\033[48:5:166:0m%s\033[m\n" "Hello world"  # darker orange

您的终端下的冒号可能需要为分号。