颜色没有以诅咒结束
color not ended in curses
我最近正在使用 curses
库开发一个游戏项目,我使用了与颜色相关的函数,例如 start_color()
、init_color()
和 init_pair()
。该颜色在我的项目中效果很好,但一旦使用,其他 TUI
应用程序(如 vim
中的颜色就会出错。
例如:
当我第一次编辑我的代码的某些部分时,它是这样的:
这是 vim
配色方案 slate
,看起来不错。
然而,当我运行我的代码并退出并再次编辑代码时,它变成了这样:
注:我做的时候没有做任何改动,我以为是因为我修改了颜色定义当我 运行 我的代码。另外,如果我使用其他功能,它也会出错,如:
但原来的应该是这样的:
我想知道为什么会这样,我想可能有一些我没有使用的颜色结束函数,就像 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
中)。与 color pair(默认为 0)不同,没有所有终端使用的预定义调色板可以产生颜色。要了解这一点,请比较这些变体的 initc
功能:
- xterm(256 色)
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\,
- Linux console(16 种颜色)
initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
因为 ncurses 拥有的唯一信息是如何更改颜色,它无法在退出时将调色板设置回其原始状态。
进一步阅读:
我最近正在使用 curses
库开发一个游戏项目,我使用了与颜色相关的函数,例如 start_color()
、init_color()
和 init_pair()
。该颜色在我的项目中效果很好,但一旦使用,其他 TUI
应用程序(如 vim
中的颜色就会出错。
例如: 当我第一次编辑我的代码的某些部分时,它是这样的:
这是 vim
配色方案 slate
,看起来不错。
然而,当我运行我的代码并退出并再次编辑代码时,它变成了这样:
注:我做的时候没有做任何改动,我以为是因为我修改了颜色定义当我 运行 我的代码。另外,如果我使用其他功能,它也会出错,如:
但原来的应该是这样的:
我想知道为什么会这样,我想可能有一些我没有使用的颜色结束函数,就像 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
中)。与 color pair(默认为 0)不同,没有所有终端使用的预定义调色板可以产生颜色。要了解这一点,请比较这些变体的 initc
功能:
- xterm(256 色)
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\,
- Linux console(16 种颜色)
initc=\E]P%p1%x%p2%{255}%*%{1000}%/%02x%p3%{255}%*%{1000}%/%02x%p4%{255}%*%{1000}%/%02x,
因为 ncurses 拥有的唯一信息是如何更改颜色,它无法在退出时将调色板设置回其原始状态。
进一步阅读: