肉
在C或C++中,有没有直接读取颜色调色板RGB值的方法?特别感兴趣的是xterm(和其他终端)使用的扩展色彩空间,可以定义高达256种终端颜色。
土豆
问题在于,我想定义自己的颜色(使用ANSI转义序列,例如\e]4;3;rgb:cc/78/33\e\\
,或直接在c中定义),但我需要在重新定义它们之前保存用户的颜色(以防万一他们已经重新定义了它们),这样当我的程序完成时就可以恢复它们。覆盖用户设置不好。
目前,我正在尝试以客户端方式使用ANSI转义序列来解决这个问题。但由于我找不到如何获取颜色,所以开始考虑在c或c++中解决这个问题。
该解决方案将编写为一个Ruby gem,并带有本地扩展(基本上是嵌入式c或c++代码),我将努力获得跨平台解决方案,即使主要目标是OS X,其次是Linux环境...
酱汁
从我的初始实验中,我已经可以为颜色调色板中的代码点定义任何颜色。我也可以轻松地恢复默认的系统颜色(因为它们符合ANSI标准)。我已经找了很多方法以使用ANSI转义代码实现这一点,但没有找到。我想这是在某个地方保存在内存中的,如果有办法找到它,读取颜色就应该很容易...
甜点
总结迄今为止评论中的信息:
看起来唯一一致的做法是在不同的颜色下打印屏幕上的█字符,并从中获取颜色。由于这个项目应该跨越三个主要操作系统的平台,并且Linux目前有3个显示管理器正在使用或即将使用,而Windows有两个(7和8),我只能想象将是多么令人愉快的几个小时 :)
所以我的“解决方案”™是只覆盖用户的颜色(如果他们有除系统默认值之外的任何东西...实际上是相当少见的)。我将提供一个设置文件,用户可以告诉插件应该还原哪些颜色,如果他们对系统默认值不满意。务实而无聊,但这让我再次开始了这个项目 :)