为什么 ANSI 颜色转义以 'm' 而不是 ']' 结尾?
Why do ANSI color escapes end in 'm' rather than ']'?
ANSI 终端颜色转义可以在大多数编程语言中使用 3[...m
完成。 (您可能需要在某些语言中执行 \e
或 \x1b
)
我一直觉得奇怪的是他们如何以 3[
开头,但以 m
结尾是否有一些历史原因(也许 ]
被映射到现在被 ASCII table 中的 m
占用的位置?)还是任意字符选择?
它并非完全随意,而是遵循委员会制定的方案,并记录在 ECMA-48 中(与 ISO 6429 相同)。除了开头的 Escape 字符外,后面的字符由范围指定。
虽然Escape[
被广泛使用(这个叫做控制序列引入子CSI),还有其他的控制序列(比如Escape]
,操作系统命令OSC)。这些序列可能有参数,和一个最后一个字节。
题目中,使用CSI,m
是final byte,恰好告诉终端该序列应该做什么。给定的参数是数字列表。另一方面,对于 OSC,command-type 在开头,参数受限较少(它们可能是任何可打印字符的字符串)。
ANSI 终端颜色转义可以在大多数编程语言中使用 3[...m
完成。 (您可能需要在某些语言中执行 \e
或 \x1b
)
我一直觉得奇怪的是他们如何以 3[
开头,但以 m
结尾是否有一些历史原因(也许 ]
被映射到现在被 ASCII table 中的 m
占用的位置?)还是任意字符选择?
它并非完全随意,而是遵循委员会制定的方案,并记录在 ECMA-48 中(与 ISO 6429 相同)。除了开头的 Escape 字符外,后面的字符由范围指定。
虽然Escape[
被广泛使用(这个叫做控制序列引入子CSI),还有其他的控制序列(比如Escape]
,操作系统命令OSC)。这些序列可能有参数,和一个最后一个字节。
题目中,使用CSI,m
是final byte,恰好告诉终端该序列应该做什么。给定的参数是数字列表。另一方面,对于 OSC,command-type 在开头,参数受限较少(它们可能是任何可打印字符的字符串)。