在这个简单的程序(用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
来改变这个假设)。