我最近正在使用curses
库制作游戏项目,并使用了与start_color()
,init_color()
和init_pair()
等颜色相关的功能。颜色在我的项目中运行良好,但一旦使用,其他TUI
应用程序中的颜色(如vim
)就会出错。
例如: 当我第一次编辑代码的某些部分时,就像这样:
这是vim
使用colorscheme slate
,看起来不错。
然而,当我运行我的代码并再次退出并编辑代码时,它会变成这样:
注意: 当我这样做时,我没有改变任何内容,我认为这是因为我在运行代码时更改了颜色定义。另外,如果我使用其他功能,也会出错,例如:
我想知道为什么会发生这种情况,我想可能有一些我没有使用的颜色的结束函数,就像initscr()
和endwin()
一样,start_color()
应该有另一个颜色}。谁能告诉我为什么?非常感谢。
答案 0 :(得分:1)
对于支持它的终端,init_color()具有与ncurses中其他颜色相关的功能不同的效果。它会更改任何应用程序使用的颜色的调色板:
如果终端能够重新定义颜色,程序员可以使用例程
init_color
来更改颜色的定义。
调色板存储在终端仿真器中;每个使用颜色的应用程序都将使用相同的颜色集,除非它通过转义序列修改调色板。这些转义序列记录在XTerm Control Sequences。
中 ncurses无法确定开始时颜色的调色板是什么;它不能在退出时将调色板恢复到其初始状态(例如,在endwin
中)。与颜色对(默认为0)不同,所有可以产生颜色的终端都没有使用预定义的调色板。要查看此内容,请比较这些变体的initc
功能:
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
因为ncurses唯一的信息是如何更改颜色,所以在退出时它无法将调色板设置回原始状态。
进一步阅读: