终端颜色使用terminfo?

时间:2016-03-22 15:08:10

标签: c++ c linux

我正在编写一个允许在终端中使用颜色的C ++类。我希望它适用于每个终端:

  • 在支持它的终端上使用真彩色(24位)打印,
  • 在支持它的终端上使用256色(6x6x6),
  • 使用基本的16种颜色。

我使用termcap编写了一次C函数,我想在这种情况下使用它。但是,手册页说:

  

termcap数据库是一个过时的工具,用于描述字符单元终端和打印机的功能。仅保留旧程序的功能;新的应该使用terminfo数据库和相关的库。

所以我尝试使用terminfo,但我找不到如何做到这一点。我的系统中没有terminfo.h(我在Debian上运行)。

我的问题是:

如何使用最新的工具(即不是termcap,根据手册页)获得C / C ++中当前终端的颜色可能性?

1 个答案:

答案 0 :(得分:2)

简短的回答是你无法从terminfo获取信息。

答案越久:

  • 要有效使用TrueColor,您需要一个处理3个参数的接口(对于红色绿色蓝色)。 Termcap无法做到这一点。 Terminfo可以处理多个参数,但是......
  • 没有标准的终端功能(功能的名称,可能是布尔值,数字或字符串)处理TrueColor。
  • 您可以调整现有功能,但它们有局限性

查看terminfo(5)手册,您可能会看到这些(字符串):

<div class="row">
    <div class="col-md-2">
        <h1>Headline</h1>
        <p>
            lorem ispum...
        </p>
    </div>
</div>

与这些(数字)相关:

   initialize_color          initc  Ic   initialize color #1
                                         to (#2,#3,#4)
   initialize_pair           initp  Ip   Initialize color
                                         pair #1 to
                                         fg=(#2,#3,#4),
                                         bg=(#5,#6,#7)

与这些颜色和方案兼容的ANSI颜色和方案(例如16色,88色和256色)假设您在中着色前景和背景。原因就是很久以前,硬件终端只是这样工作。 max_colors colors Co maximum number of colors on screen max_pairs pairs pa maximum number of color-pairs on the screen 功能适用于不同的方案(Tektronix),这似乎很有用。

但是,terminfo是编译的,生成的二进制文件只存储带符号的16位整数。您无法使用终端说明为24位颜色存储合适的initialize_color max_pairs。 (termcap将所有内容存储为字符串,但如上所述不适用于此应用程序。)

进一步阅读: