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

Is it possible to change the foreground and background colour at the same time with terminfo?

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

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

3[48;5;200;38;5;100m

我想切换到使用 terminfo 库以使我的程序在其他类型的终端上运行。但是,我找不到一次更新多种颜色的方法 - 我想设置粗体和下划线 只有一种 3 和一种 [=13] 的颜色=].

标准中列出了以下命令,但其中 none 不仅看起来符合我的要求,我实际上找不到第一组和第二组视频属性的实际含义:

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

否 - terminfo 不会这样做:

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

如果您碰巧在使用 ncurses,您可以可以定义自己的功能,使用 tic -x, and use your own interpretation for those (see for example ncurses user-definable capabilities in the terminal database). As long as their syntax matches the other terminfo strings, you could then use tparm 来填充数字(比 [=13= 好一点) ]).