首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >终端颜色使用终端?

终端颜色使用终端?
EN

Stack Overflow用户
提问于 2016-03-22 15:08:09
回答 1查看 2.7K关注 0票数 5

我正在编写一个C++类,允许在终端中使用颜色。我要它在每个终端都能工作:

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

我曾经用termcap编写过C函数,并且在本例中我想使用它。然而,手册页说:

术语数据库是描述字符单元终端和打印机功能的过时工具.它只保留用于旧程序的功能;新程序应该使用terminfo数据库和相关库。

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

我的问题是:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-22 19:39:46

简单的回答是,在2018年1月发布ncures6.1之前,您无法从终端获取信息。

较长的答案是:

  • 要有效地使用TrueColor,您需要一个处理3个参数的接口(用于红色、绿色、蓝色)。泰姆卡普不能这么做。Terminfo可以处理多个参数但是..。
  • 没有标准的终端功能(可以是布尔值、数字或字符串的特性的名称)处理TrueColor本身。
  • 您可以调整现有的功能,但它们有其局限性。

查看终止(5)手册,您可能会看到以下(字符串):

代码语言:javascript
复制
   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)

与这些(数字)有关的:

代码语言:javascript
复制
   max_colors                colors Co   maximum number of
                                         colors on screen
   max_pairs                 pairs  pa   maximum number of
                                         color-pairs on the
                                         screen

ANSI颜色和方案兼容这些(如16-,88-和256-颜色)假设你是着色前景和背景成对。原因是很久以前,硬件终端就是这样工作的。initialize_color功能用于不同的方案(Tektronix),这似乎很有用。

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

在这个问题和答案第一次写出来几年后,我们更新了一种使用32位整数的新文件格式,这足以表示24位RGB颜色的颜色数。

ncurses 6.1手册页的发布公告中可以找到更多的细节,后者指出,一些直接访问终端数据的应用程序在旧的API中仍然存在限制。

进一步读:

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36158093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档