为什么 ANSI 转义码显示不正确?
Why are ANSI escape codes not displaying properly?
我正在实现一个 Python 控制台应用程序,它使用 ANSI 转义码来为各种事物着色。我在 Pop OS(一个 Ubuntu 派生词)上开发,并且着色按设计工作。
我刚刚在 Centos 机器上试用了该应用程序,虽然颜色显示正确,但在彩色文本周围有额外的文本(包含数字的小框,垂直堆叠),这显然是对应的到转义码。
转义码都在Python的这个位指定:
style = ('3[1m3[3m' if bold and italic else
'3[1m' if bold else
'3[3m' if italic else
'3[0m')
return f'[=10=]1{style}[=10=]2[=10=]13[38;5;{color.code}m[=10=]2{s}[=10=]13[0m[=10=]2'
(本人正在做的项目是https://github.com/geophile/marcel,以上代码来自marcel.util.colorize()。)
真正奇怪的是,在某些情况下,多余的字符不存在,而在其他情况下却存在。另外,如果我从我的 pop os 机器通过 ssh 连接到我的 centos 机器,文本在所有情况下都会正确着色。
如何解释这种行为差异 - .bashrc 中的某些内容?关于 X 配置?
[=10=]2
不是“ANSI”转义码。一些 programs(不是 terminals)可能会解释它,并且根据字符串的使用方式,可能会绕过 programs 用于处理额外的转义。 (一些 终端 当然可以为 002
等提供他们自己的解释,但你不太可能在任何地方找到记录除了他们的源代码)。
我正在实现一个 Python 控制台应用程序,它使用 ANSI 转义码来为各种事物着色。我在 Pop OS(一个 Ubuntu 派生词)上开发,并且着色按设计工作。
我刚刚在 Centos 机器上试用了该应用程序,虽然颜色显示正确,但在彩色文本周围有额外的文本(包含数字的小框,垂直堆叠),这显然是对应的到转义码。
转义码都在Python的这个位指定:
style = ('3[1m3[3m' if bold and italic else
'3[1m' if bold else
'3[3m' if italic else
'3[0m')
return f'[=10=]1{style}[=10=]2[=10=]13[38;5;{color.code}m[=10=]2{s}[=10=]13[0m[=10=]2'
(本人正在做的项目是https://github.com/geophile/marcel,以上代码来自marcel.util.colorize()。)
真正奇怪的是,在某些情况下,多余的字符不存在,而在其他情况下却存在。另外,如果我从我的 pop os 机器通过 ssh 连接到我的 centos 机器,文本在所有情况下都会正确着色。
如何解释这种行为差异 - .bashrc 中的某些内容?关于 X 配置?
[=10=]2
不是“ANSI”转义码。一些 programs(不是 terminals)可能会解释它,并且根据字符串的使用方式,可能会绕过 programs 用于处理额外的转义。 (一些 终端 当然可以为 002
等提供他们自己的解释,但你不太可能在任何地方找到记录除了他们的源代码)。