1

我正在编写一个需要输出样式文本的控制台程序。现在我使用固定的 ANSI 转义码作为前景色和背景色、粗体和下划线。例如,我可以编写\033[35m将前景色更改为紫色。

自己编写代码的好处是我可以将它们链接起来。我可以使用一个命令更改背景颜色前景色,从而节省宝贵的字节:

\033[48;5;200;38;5;100m

我想改用 terminfo 库来使我的程序在其他类型的终端上工作。但是,我找不到一次更新多种颜色的方法 - 我想设置粗体和下划线以及\033只有一种且只有一种的颜色m

标准中列出了以下命令,但不仅这些命令似乎都没有做我想要的,我实际上无法找到第一组和第二组视频属性实际上是什么:

  • set_a_attributes:定义第二组视频属性#1-#6
  • set_a_background:使用 ANSI 转义将背景颜色设置为 #1
  • set_a_foreground:使用 ANSI 转义将前景色设置为 #1
  • set_attributes:定义第一组视频属性#1-#9

terminfo有没有办法只使用命令来获得我想要的东西?提前致谢。

4

1 回答 1

1

否 - terminfo 不这样做:

  • 它列出了可能在许多不同终端上提供的功能
  • 标准功能已定义……不久前。当然,termcap 也是如此。
  • 颜色和其他属性是(现在使用最常见的终端)您可能认为可以任意组合的东西,但那是相当新的——没有任何保证
  • 所以功能是小块的(更新前景色,更新背景色)。
  • 一个例外是sgr,它一次最多可以设置 9 个视频属性。这些都不是颜色。

如果您碰巧使用 ncurses,您可以定义自己的功能,使用tic -x,并使用您自己的解释(例如,参见终端数据库中的ncurses 用户可定义功能)。只要它们的语法与其他 terminfo 字符串匹配,您就可以使用它tparm来填写数字(比 稍微好一点printf)。

于 2015-05-07T20:58:54.470 回答