【发布时间】:2020-06-12 12:51:00
【问题描述】:
我看过一些关于 ansi 序列的概述。在测试中,我发现前景色和背景色设置仅适用于带有文本的部分,导致一些不和谐的对比,尤其是对于语法突出显示。是否有指定非文本区域颜色/关闭此呈现行为的顺序?
我还发现提到了这两个序列,但是我发现的所有地方都指定这些是实现定义的,没有提到任何特定的语法。我尝试使用它,就好像它是一个 rgb 序列一样,没有任何影响。
\033[49
\033[39
【问题讨论】:
-
\033[39和 49 应该指定分别使用默认的前景色和背景色,有点像\033[0。例如,尝试echo -e "\e[31mfoo\e[39mbar",您应该会看到红色的“foo”,而默认终端颜色的“bar”。如果第一个 ANSI 转义定义了背景颜色,您将不会看到这两个部分之间有任何区别,因为\e[39m只会重置文本颜色 -
啊,我明白了,我现在明白了,49 和 39 将它们的特定设置重置为默认值。给人的印象是它有一些特定的语法来指定特定的颜色。这很令人沮丧。这几乎看起来像是一个控制台渲染错误,因为更改窗口大小会稍微改变结果。换行符或制表符在使用颜色时会产生问题吗?
-
我看不到您当前的情况/预期情况(我在一个阻止 imgur 的公司网络上,StackOverflow 使用它来托管用户上传的图像)所以我不确定我会能够为您提供更多帮助。根据我的经验,虽然富文本格式不是您想要在终端上执行的操作。这可能是可能的,但您可以肯定,这比将您的解决方案基于更适应的平台(如文本编辑器、网页、首选语言的 GUI 工具包或 IDE)要麻烦得多
-
啊,好吧,我想我可以解释一下,它是标准的黑白 Windows 控制台。我显然得到了需要语法突出显示的部分(我正在撕掉 mvsc 的语法突出显示)。似乎尾随换行符或制表符的部分呈现标准的黑色/白色。我没有重置回默认值,它似乎只是自己做的。我的直接思考过程是,哦,可能有某种方法可以控制文本部分等特定颜色(因此我对 39 和 49 转义序列感到困惑)。
-
在写任何文本之前在每一行上使用
\e[K(从光标到行尾擦除)似乎有帮助,至少在我用cygwin打包的mintty上:echo -e "\e[41m(tab)foo(linefeed)bar"只显示foo和bar红色背景,但如果我将其更改为echo -e "\e[41m\e[K(tab)foo(linefeed)\e[Kbar\e[0m"我现在有两行红色背景,很可能是因为终端现在认为它必须“重绘”这些单元格。我想这不会解决窗口大小调整问题
标签: ansi-escape