颜色没有以诅咒结束

时间:2016-03-17 03:17:36

标签: c ncurses

我最近正在使用curses库制作游戏项目,并使用了与start_color()init_color()init_pair()等颜色相关的功能。颜色在我的项目中运行良好,但一旦使用,其他TUI应用程序中的颜色(如vim)就会出错。

例如: 当我第一次编辑代码的某些部分时,就像这样:

first image

这是vim使用colorscheme slate,看起来不错。

然而,当我运行我的代码并再次退出并编辑代码时,它会变成这样:

second image

注意: 当我这样做时,我没有改变任何内容,我认为这是因为我在运行代码时更改了颜色定义。另外,如果我使用其他功能,也会出错,例如:

Third

但原始的应该是这样的: Fourth

我想知道为什么会发生这种情况,我想可能有一些我没有使用的颜色的结束函数,就像initscr()endwin()一样,start_color()应该有另一个颜色}。谁能告诉我为什么?非常感谢。

1 个答案:

答案 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唯一的信息是如何更改颜色,所以在退出时它无法将调色板设置回原始状态。

进一步阅读: