Gnome Terminal无法使用curses在程序中打印红色

时间:2015-04-07 22:30:03

标签: c ubuntu terminal ncurses gnome

我正试图进入 ncurses 库。我很失望,Gnome终端可以通过ANSI转义字符打印红色,但不能打印 ncurses 中的预定义红色。

#include <curses.h>

void init_colors() {
    int a;
    for(a = 1; a < COLORS; a++) {
        init_pair(a, a, COLOR_BLACK);
    }
}

void print_colors() {
    int a;
    for(a = 1; a < COLORS; a++) {
        attron(COLOR_PAIR(a));
        mvprintw(a, 0, "color");
        attroff(COLOR_PAIR(a));
    }
}

int main() {
    initscr();
    cbreak();
    noecho();
    curs_set(0);

    if(has_colors()) 
        start_color();          

    init_colors();
    print_colors();
    getch();
    endwin();

    return 0;
}

这应该以任何默认的 ncurses 颜色打印“ color ”一词,但第二行(init_pair应该初始化第二行COLOR_PAIR因为red)根本没有印刷。似乎Gnome Terminal只是跳过这一行。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:-2)

这是another stackoverflow answer

的副本
#include <curses.h>

int main(void) {
    initscr();
    start_color();

    init_pair(1, COLOR_BLACK, COLOR_RED);
    init_pair(2, COLOR_BLACK, COLOR_GREEN);

    attron(COLOR_PAIR(1));
    printw("This should be printed in black with a red background!\n");

    attron(COLOR_PAIR(2));
    printw("And this in a green background!\n");
    refresh();

    getch();

    endwin();
}

备注

  • 您需要在start_color()之后致电initscr()以使用颜色。
  • 您必须使用COLOR_PAIR
  • 将分配了init_pair的颜色对传递给attron
  • 你不能使用颜色对0。
  • 您只需拨打refresh()一次,
  • 仅当您希望在此时看到您的输出时
  • 并且您没有调用getch()等输入函数。