为什么 ncurses 的 start_color() 会使常规文本变暗?
Why does ncurses' start_color() darken regular text?
我目前正在使用 ncurses 库创建程序,但在开始实现颜色时 运行 遇到了问题。
当我使用 ncurses 的 start_color() 函数时,默认文本颜色变为灰色(接近 #CCC)而不是常规的白色。
我用来比较的代码:
#include <stdlib.h>
#include <string.h>
#include <ncurses.h>
/* Converts a str to a string of chtype. */
chtype* str_to_chtype(char* str) {
int i;
chtype* chstr;
chstr = malloc(sizeof(chtype) * (strlen(str)+1));
for(i = 0; *str; ++str, ++i) {
chstr[i] = (chtype) *str;
}
chstr[i] = 0;
return chstr;
}
int main() {
/* Without color */
initscr();
addchstr(str_to_chtype("Testing"));
getch();
endwin();
/* With color */
initscr();
start_color();
addchstr(str_to_chtype("Testing"));
getch();
endwin();
return 0;
}
图片:
关于为什么 happening/how 修复它有什么想法吗?
这是常见问题解答(请参阅 Ncurses resets my colors to white/black)。发生的事情是定义 white 和 black 的 8 种 ANSI 颜色不一定与您的默认终端前景和背景颜色匹配。通常选择强度更高的那些。所以 ANSI white 看起来像浅灰色。 (在某些终端上,ANSI black 结果是不同的灰色阴影)。
无论您的终端有 8、16、88 还是 256 种颜色,都会出现此问题,因为您会遇到更多颜色的所有终端都遵循 aixterm (16) 或 xterm (88, 256),它们使用相同的第一组 8 种 ANSI 颜色(黑色为 0 号,白色为 7 号)。
如前所述,use_default_colors 是为解决此问题而提供的扩展(不是 X/Open curses 的一部分)。
我目前正在使用 ncurses 库创建程序,但在开始实现颜色时 运行 遇到了问题。
当我使用 ncurses 的 start_color() 函数时,默认文本颜色变为灰色(接近 #CCC)而不是常规的白色。
我用来比较的代码:
#include <stdlib.h>
#include <string.h>
#include <ncurses.h>
/* Converts a str to a string of chtype. */
chtype* str_to_chtype(char* str) {
int i;
chtype* chstr;
chstr = malloc(sizeof(chtype) * (strlen(str)+1));
for(i = 0; *str; ++str, ++i) {
chstr[i] = (chtype) *str;
}
chstr[i] = 0;
return chstr;
}
int main() {
/* Without color */
initscr();
addchstr(str_to_chtype("Testing"));
getch();
endwin();
/* With color */
initscr();
start_color();
addchstr(str_to_chtype("Testing"));
getch();
endwin();
return 0;
}
图片:
关于为什么 happening/how 修复它有什么想法吗?
这是常见问题解答(请参阅 Ncurses resets my colors to white/black)。发生的事情是定义 white 和 black 的 8 种 ANSI 颜色不一定与您的默认终端前景和背景颜色匹配。通常选择强度更高的那些。所以 ANSI white 看起来像浅灰色。 (在某些终端上,ANSI black 结果是不同的灰色阴影)。
无论您的终端有 8、16、88 还是 256 种颜色,都会出现此问题,因为您会遇到更多颜色的所有终端都遵循 aixterm (16) 或 xterm (88, 256),它们使用相同的第一组 8 种 ANSI 颜色(黑色为 0 号,白色为 7 号)。
如前所述,use_default_colors 是为解决此问题而提供的扩展(不是 X/Open curses 的一部分)。