是否可以使用terminfo同时更改前景色和背景色?

时间:2015-05-07 17:27:31

标签: terminfo

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

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

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

我想切换到使用terminfo库让我的程序在其他类型的终端上工作。但是,我无法一次找到更新多种颜色的方法 - 我想设置粗体并为设置颜色,只有一个\033且只有一个{{1} }。

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

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

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

1 个答案:

答案 0 :(得分:1)

否 - terminfo不会这样做:

  • 它列出了可能在许多不同终端上提供的功能
  • 标准功能已定义......前一段时间。当然,对于termcap也是如此。
  • 颜色和其他属性(现在最常见的终端)你可以假设的东西可以任意组合,但这是最近的 - 没有任何保证
  • 因此功能很小(更新前景色,更新背景色)。
  • 一个例外是sgr,一次最多可以设置9个视频属性。这些都不是颜色。

如果您正在使用ncurses,可以使用tic -x 定义您自己的功能,并使用您自己的解释(例如参见 {{3}终端数据库中的)。只要他们的语法与其他terminfo字符串匹配,您就可以使用ncurses user-definable capabilities填写数字(略好于printf)。