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

Ale*_*lls 6 ansi

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

Tho*_*key 9

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

xterm(参见XTerm控制序列)使用遵循"ANSI"(实际上很久以前退出标准化)ECMA-48语法的控制序列.

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

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

255 165   0             orange
Run Code Online (Sandbox Code Playgroud)

(鲜红色加上适度亮绿色).要在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"
Run Code Online (Sandbox Code Playgroud)

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

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

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


Gri*_*ave 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
Run Code Online (Sandbox Code Playgroud)

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