C – 用ncurses获取中性背景

在这个简单的程序(用C编写)

#include <ncurses.h> #include <string.h> int main() { initscr(); printw("line 1\n"); printw("line 2\n"); start_color(); init_pair(1, COLOR_RED, COLOR_BLACK); printw("line 3"); getch(); endwin(); return 0; } 

一个红色的文字印在黑色背景上的屏幕上。 但是当我运行这个程序的时候,在Linux(Gnometerminal)中,背景比terminal的黑色背景稍亮。

我不想在terminal的默认黑色颜色上设置背景颜色:我想保留terminal背景,并将ncurses背景设置为透明。

有没有办法做到这一点?

注意:我试图把函数use_default_colors(); start_color(); 就像这个问题所build议的那样,但是没有用。

man init_pair

作为扩展,ncurses允许您通过assume_default_colors例程设置颜色对0,或者如果您首先调用use_default_colors例程,则指定使用默认颜色(颜色编号-1)。

所以,一般来说,如果你想使用“默认”颜色,使用-1作为颜色值,但确保你先调用了use_default_colors()

 #include <ncurses.h> #include <string.h> int main() { initscr(); use_default_colors(); printw("line 1\n"); printw("line 2\n"); start_color(); init_pair(1, COLOR_RED, -1); printw("line 3"); getch(); endwin(); return 0; } 

为了什么是值得的,这是一个以@Pawel Veselov的建议开始的更正的例子:

 #include <ncurses.h> #include <string.h> int main(void) { initscr(); if (has_colors()) { use_default_colors(); start_color(); init_pair(1, COLOR_RED, -1); } printw("line 1\n"); printw("line 2\n"); attrset(COLOR_PAIR(1)); printw("line 3"); getch(); endwin(); return 0; } 

最后一行应该出现在终端的默认背景颜色上(对于协作终端),红色文本显示在终端的默认背景色上 (要迂腐,只有在has_colors成立的attrset才可以做到…)。

以白底黑色跑步:

在这里输入图像描述

或黑白:

在这里输入图像描述

使用终端的默认背景。 如果没有use_default_colors ,ncurses假定终端显示白底黑字(但是你可以使用assume_default_colors来改变这个假设)。