0

有没有办法嵌套 VT100 转义序列?例如,如果我想在红色文本中使用粗体字,如下所示:

在此处输入图像描述

有没有简单的方法来做到这一点?如果我执行以下操作,第一个\e[m打算关闭粗体的脸也会关闭红色。

"\e[31mfoo \e[01mbar\e[m baz\e[m"
4

2 回答 2

2

不 - 他们不“筑巢”。通常,可以设置或重置视频模式。一些重置会影响多种模式,例如\e[m重置粗体、下划线、反转等。

DEC VT100 实现了ANSI 标准的一个子集,同时还提供了扩展。相应的标准已被 ISO-6429 淘汰,它作为 ECMA-48 很容易获得。

仔细阅读该标准可能会发现其中一些是模棱两可的,即可以被解读为暗指不同类型的行为。例如,在 SGR(设置图形再现)部分中没有枚举可能的视频属性,以及它们如何相互关联。由于这种模糊性,存在使用“VT100 转义序列”的终端,这些终端具有明显不同的颜色行为(例如参见 ncurses FAQ My terminal shows some uncolored spaces)。

由于该标准并未指定所有内容,因此我们依靠通用实践和约定来确定终端仿真器可以做什么,以及可以在哪里开发扩展标准的新功能。例如,ECMA-48 没有提到广泛使用的 VT100 滚动功能。此外,它实际上并没有说 SGR 0 重置color。虽然现有的终端仿真器碰巧做到了这一点,但早在约定普及之前,就有可能拥有依赖不同转义序列来重置颜色的终端仿真器。(xterm 中的动态颜色功能就是一个例子)。

如前所述,可以提供扩展ECMA-48 概述了私人使用(依赖于实现)控制序列的编码。有人可以(没有人......)设计一个提供建议功能类型的终端。如果这不能满足许多​​人的感知需求,或者如果它使用起来很麻烦,它将被忽略。因为这种类型的转义序列不同于现有的实践,curses 和类似的库中不支持它。那使用起来会很麻烦。

这并不是说不可能提供这样的功能。例如,xterm 自补丁 #251以来提供了一项功能(并入 GNU 屏幕),该功能通过添加将标题保存在堆栈上的模式来回避长期存在的检索窗口标题的问题(被视为安全问题)。GNU 屏幕使用此功能在退出时自动恢复原始窗口标题。

于 2015-03-11T20:43:47.390 回答
1

\e[m重置所有图形再现选项,包括颜色。要仅清除粗体选项,您可以使用\e[22m,但并非所有终端都支持此序列。

于 2015-03-11T20:48:07.183 回答