【问题标题】:Is there a way to create an Orange color from ANSI escape characters?有没有办法从 ANSI 转义字符创建橙色?
【发布时间】:2025-11-24 10:20:06
【问题描述】:

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

【问题讨论】:

标签: ansi


【解决方案1】:

严格来说,不是:ANSI 从未对任何被称为“橙色”的东西(用于终端的控制序列)进行标准化。一些终端可以做到这一点,但这超出了标准的范围。

xterm(参见XTerm Control Sequences)使用遵循“ANSI”(实际上早就从标准化中退出)ECMA-48 语法的控制序列。

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

Orange 可以由 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 中使用的 subparameters,这在早期被忽略了)。为了兼容性(包括与从 xterm 早期实现复制的终端),xterm 尊重两者。

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

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

【讨论】:

  • 残酷的语法,但当它工作的时候很棒!对我来说,带有分号的变体在我的 python 脚本中工作,这些脚本打印到一个文件,然后在 jenkins 中输入。全部在 Windows 7 上。像这样:orangeBg = "\033[48;2;255;165;0m" 谢谢!
【解决方案2】:

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

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

【讨论】: