【问题标题】:Color-Only Coloring Differs From Text+Color-Coloring仅颜色着色不同于文本+颜色着色
【发布时间】:2018-10-12 15:29:41
【问题描述】:

如果我使用 chtype(字符的 ncurses 容器对象)打印一个字符,只指定像 COLOR_PAIR(SOME_PAIR) 这样的颜色,我会得到两个颜色字符。使用' ' | COLOR_PAIR(SOME_PAIR),即与一个字符进行 OR-ing,我只得到一个,正如我所料。

亲自尝试(使用-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();
}

对我来说是这样的:

那里发生了什么? addch曾经怎么能操纵多个角色?

【问题讨论】:

    标签: c shell graphics terminal ncurses


    【解决方案1】:

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

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

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

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

    来自man curs_addch

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

    由于 ncurses 看到 COLOR_PAIR(RED) 包含字符代码 0,ncurses 将其解释为不可打印字符并相应地打印它,one 字符在 two字段。


    【讨论】:

      猜你喜欢
      • 2021-01-02
      • 2014-06-29
      • 2019-12-29
      • 1970-01-01
      • 2018-11-30
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      相关资源
      最近更新 更多