仅颜色着色不同于文本+颜色着色

时间:2018-05-02 13:37:14

标签: c shell graphics terminal ncurses

如果我使用chtype(字符的ncurses容器对象)打印字符,只指定像COLOR_PAIR(SOME_PAIR)这样的颜色,我会得到两个颜色字符。使用' ' | COLOR_PAIR(SOME_PAIR),即与字符进行OR运算,我只得到一个,就像我预期的那样。

自己尝试(使用-lncurses构建):

#include <ncurses.h>

#define RED 1

int main(void)
{
        initscr();
        start_color();
        curs_set(0);
        init_pair(RED, COLOR_RED, COLOR_RED);

        printw("Multiple: ");
        addch(COLOR_PAIR(RED));

        printw("\t\tSingle: ");
        addch(' ' | COLOR_PAIR(RED));

        getch();
        endwin();
}

对我来说看起来像这样:
Output of Program

那里发生了什么? addch 如何操纵多个角色?

1 个答案:

答案 0 :(得分:0)

chtype包含字符和属性数据。将chtype设置为COLOR_PAIR(COLOR_RED),您可以设置属性数据,而不是字符数据,从而有效地将字符数据初始化为0

在ASCII字符集中,字符代码0对应于NULL字符,通常用于终止C中的字符串。

现在,要意识到它是一个不可打印的字符,因此在文本表示中用两个字符表示:^@

addch和朋友在比您在终端中获得的字段更高的抽象级别上操作,他们对字符进行操作,包括不可打印的字符。

来自man curs_addch

  

如果ch是任何[非空白]控制字符,则会在^X中绘制   符号。          添加控制字符后调用winch不会返回          字符本身,但返回控制字符的^ - 表示。

由于ncurses看到COLOR_PAIR(RED)包含字符代码0,ncurses会将其解释为不可打印的字符并相应地打印出来,中的一个字符字段。