有没有一种方法可以使用ANSI转义字符创建橙色?

19

我正在寻找一种控制代码,使用 ANSI 或其他标准创建终端中的橙色文字,这是否可能?我只看到黄色和红色可用,并且我认为您不能将红色和黄色混合在同一个字符中 :)


1
棕黄色可能会起作用,请参见https://en.wikipedia.org/wiki/ANSI_escape_code - user180100
是的,谢谢,但我无法弄清楚那段代码的用途。 - Alexander Mills
2个回答

18
严格来说,不行: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
语法有点残忍,但一旦运行起来就非常出色!对我来说,在我的 Python 脚本中使用分号的变体可以在 Windows 7 上工作,这些脚本会将输出打印到一个文件中,然后在 Jenkins 中输入。像这样:orangeBg = "\033[48;2;255;165;0m"谢谢! - domih

7

256色调色板更兼容,使用起来稍微容易一些。这里有几个橙色:

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

冒号在您的终端下可能需要改为分号。将第一个数字更改为38,以设置前景色。第二个数字(5)表示使用256色调色板,第三个数字选择索引颜色。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接