为什么ncurses的start_color()会使常规文本变暗?

时间:2015-03-04 16:39:09

标签: c++ c colors ncurses

我目前正在使用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;
}

图片: Before start_color After start_color

关于为什么会发生这种情况或如何修复它的任何想法?

1 个答案:

答案 0 :(得分:2)

这是一个FAQ(见Ncurses resets my colors to 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的一部分)。