2015-05-07 58 views
1

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

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

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

我想切换到使用的terminfo库,使其他类型的我的工作方案终端。然而,我找不到一种方法来一次更新多种颜色 - 我想设置粗体和下划线颜色只有一个\033和只有一个m

有标准中所列出下面的命令,而不是只能做这些都不似乎做我想要的,我不能实际查找视频的第一和第二组实际上属性是什么:

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

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

回答

1

否 - terminfo的不做到这一点:

  • 它列出功能,这很可能会提供许多不同的终端
  • 标准的功能被定义......而回。当然,termcap也一样。
  • 颜色等属性(最常见的终端现在)的东西,你可能会认为,可以任意组合,但毕竟是相当近期—没有保证
  • 所以能力在小块(更新前景色,更新背景颜色)。
  • 有一个例外是sgr,它一次最多可以设置9个视频属性。这些都不是颜色。

如果你碰巧使用ncurses的,你可以定义你自己的能力,使用tic -x,并使用那些你自己的解释(见例如在终端数据库ncurses user-definable capabilities)。只要它们的语法与其他terminfo字符串匹配,就可以使用tparm来填充数字(比printf稍好一点)。

+0

嗯,这很烦人!有意义,但。 –