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