C 如何不更改其他终端程序中的颜色?
我发现了一个我用C 如何不更改其他终端程序中的颜色?,c,terminal,colors,ncurses,xterm,C,Terminal,Colors,Ncurses,Xterm,我发现了一个我用ncurses编写的旧游戏。我注意到,在关闭游戏并运行另一个基于ncurses的程序后,该程序的颜色也发生了变化。这完全是我几年前写游戏时没有意识到的预期行为 由于ncurses不知道初始调色板,因此退出游戏后无法将调色板重置为初始值。记住这一点,在ncurses中处理颜色的最佳方法是什么 以下是我所考虑的: 仅覆盖调色板中较高的颜色。如果从位置0开始更改颜色,则很可能会更改其他程序正在使用的颜色。如果您从100开始(例如),那么您的更改干扰其他程序的可能性要小得多。我想这里的关
ncurses
编写的旧游戏。我注意到,在关闭游戏并运行另一个基于ncurses
的程序后,该程序的颜色也发生了变化。这完全是我几年前写游戏时没有意识到的预期行为
由于ncurses
不知道初始调色板,因此退出游戏后无法将调色板重置为初始值。记住这一点,在ncurses
中处理颜色的最佳方法是什么
以下是我所考虑的:
xterm
颜色。好像是在做那样的事情。我假设大多数现代系统都会使用相同的调色板运行终端,所以这可能是好的,这取决于您的目标系统。xterm
的默认选项板在此处可用:color\u content
获得原始颜色。我尝试过,但没有效果ncurses
只能获取由init_color
设置的颜色的颜色内容xterm
调色板。我想如果终端支持256种颜色,它很有可能使用默认的xterm
调色板。但是,用户可能已经更改了它,因此它可能仍然会干扰用户配置xterm
的API或其他终端仿真器获取颜色。我不知道是否存在这样的API,但这将是一个潜在的解决方案,主要缺点是它只支持特定的终端仿真器infocmp -L | grep orig
我的只能重设成对,不能重设颜色。我还没有找到一个API来检查程序本身,但是没有真正的理由检查它,除非你已经实现了多种处理颜色的方法。顺便说一句,我有过,我对这两个都不满意
我试图覆盖调色板中较高的颜色,但我仍然设法为其他程序更改颜色。我仍然认为避免16种第一颜色是明智的,但似乎没有任何颜色可以安全地改变
我还尝试使用的默认颜色,但我无法得到我想要的效果。我可能可以简化主题,使它看起来更漂亮,但我无法复制我想要的外观
似乎最好的解决方案是用默认颜色制作一个好看的主题,除非这是不可能的,在这种情况下,你只能接受其他程序可能不会因此看起来很好。无论如何,打开一个新的终端并不太困难,这将使您的颜色重新排序。来源:
如果您的终端描述不包含orig_对或orig_颜色功能,您将无法将颜色重置为预诅咒状态。例如,在aixterm中会发生这种情况
但是,如果您的终端支持将颜色重置为默认状态,ncurses将在退出Curses模式时使用此选项。执行此操作的终端类型包括Linux控制台、rxvt和XFree86 xterm
要了解终端是否可以重置颜色,请运行:
infocmp -L | grep orig
我的只能重设成对,不能重设颜色。我还没有找到一个API来检查程序本身,但是没有真正的理由检查它,除非你已经实现了多种处理颜色的方法。顺便说一句,我有过,我对这两个都不满意
我试图覆盖调色板中较高的颜色,但我仍然设法为其他程序更改颜色。我仍然认为避免16种第一颜色是明智的,但似乎没有任何颜色可以安全地改变
我还尝试使用的默认颜色,但我无法得到我想要的效果。我可能可以简化主题,使它看起来更漂亮,但我无法复制我想要的外观
似乎最好的解决方案是用默认颜色制作一个好看的主题,除非这是不可能的,在这种情况下,你只能接受其他程序可能不会因此看起来很好。无论如何,打开一个新的终端并不太困难,这将使您的颜色重新排序。如果您的目标是xterm,您可以使用24位颜色,而不是修改调色板。这也适用于许多其他终端仿真器。@您能提供rici吗