gpt4 book ai didi

颜色没有以诅咒结束

转载 作者:太空宇宙 更新时间:2023-11-04 03:31:34 28 4
gpt4 key购买 nike

我最近正在使用 curses 库开发一个游戏项目,我使用了与颜色相关的函数,例如 start_color()init_color()init_pair()。该颜色在我的项目中效果很好,但一旦使用,其他 TUI 应用程序(如 vim)中的颜色就会出错。

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

first image

这是带有 colorscheme slatevim,看起来不错。

但是,当我运行我的代码并退出并再次编辑代码时,它变成了这样:

second image

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

Third

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

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

最佳答案

对于支持它的终端,init_color()与 ncurses 中其他与颜色相关的函数具有不同的效果。它改变了任何应用程序使用的颜色的调色板:

If a terminal is capable of redefining colors, the programmer can use the routine init_color to change the definition of a 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 拥有的唯一信息是如何更改颜色,所以它无法在退出时将调色板设置回其原始状态。

进一步阅读:

关于颜色没有以诅咒结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36051061/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com