字符转义序列“\033[\061m”在哪里记录为粗体?

字符转义序列“\033[\061m”在哪里记录为粗体?

我正在尝试编写一个程序,该程序运行像 gcc 这样的控制台程序并以颜色显示其输出。我用了openpty而不是pipe假装是一个字符设备,现在得到ANSI 转义码携带颜色信息。我尝试了一些程序,他们有时会给我代码CSI [ 49 m。两个都维基百科xterm 转义码文档(搜索Ps = 4 9)同意代码CSI [ 49 m意味着我应该使用默认背景颜色。

然而,debian 的 xterm 和 zsh 以及 ubuntu 的 linux 控制台并不同意。
printf '\033[\061mTest\n\033[\060m'在像 xterm 这样的控制台中执行应该使用默认背景颜色打印“Test”(\033是转义并escape + [创建 CSI(控制序列引入器)并且\061是八进制十进制 49),但它实际上打印了“测试” 以粗体显示(\061最后的似乎意味着“不再是粗体”,但维基百科和 xterm 颜色代码文档中都没有记录)。上面提到的所有控制台都同意这一点。

各种控制台和标准的颜色代码列表,但它们都没有列出CSI 49 m“粗体”的意思。

这种不一致从何而来?在哪里可以找到与 xterm、zsh 或 Linux 控制台所使用的颜色代码相对应的颜色代码列表?

答案1

\611是ASCII 字符的八进制代码,所以\e[\61mor \33[\61mor \33\133\61\155or \33[1mis <ESC>[1m

那是CSI 1 m。看维基百科或者文档xterm

$ printf '\e[\61m' | od -An -vto1 -tc
 033 133 061 155
 033   [   1   m
$ tput bold | od -An -vto1 -tc
 033 133 061 155
 033   [   1   m

为了默认背景颜色,你需要\e[49m,不需要\e[\61m。这些149数字旨在以十进制字符串表示形式表示,而不是字节值。

相关内容