课程';has_colors()返回false。有什么问题?

课程';has_colors()返回false。有什么问题?,c,colors,ncurses,ansi,C,Colors,Ncurses,Ansi,我想在ncurses模式下使用颜色属性。但正如主题中所述,has_colors()返回false,这意味着终端不支持颜色操作。但是使用printf()和ansi颜色代码(不在ncurses模式下),我可以打印彩色文本。我认为这意味着终端支持颜色操作。我错了吗?有什么问题 这是我使用的代码: int main() { initscr(); if (has_colors() == false) { endwin(); printf("No c

我想在ncurses模式下使用颜色属性。但正如主题中所述,
has_colors()
返回false,这意味着终端不支持颜色操作。但是使用
printf()
和ansi颜色代码(不在ncurses模式下),我可以打印彩色文本。我认为这意味着终端支持颜色操作。我错了吗?有什么问题

这是我使用的代码:

int main()
{
    initscr();

    if (has_colors() == false)
    {
        endwin();
        printf("No color support!\n");
        return -1;
    }

    start_color();
    init_pair(1, COLOR_RED, COLOR_BLACK);

    attron(COLOR_PAIR(1));
    printw("This is a test!");
    attroff(COLOR_PAIR(1));

    endwin();

    return 0;
}

ncurses中的终端配置有两种风格,这取决于ncurses是使用terminfo支持还是termcap支持编译的

无论哪种方式,
has_colors()
都是一个函数,它根据您对
术语
环境变量使用的值来查询curses数据库(终端根据终端的行为控制数据库)

xterm
的值可能不包含颜色控件,也可能是导致终端软件无法显示颜色的原因。只需将
术语
变量更改为如下内容:

TERM=xterm-color
然后再试一次。该终端定义包括颜色支持,并使
具有_colors()
以返回
true

编辑 从我自己的termcap文件(基于FreeBSD 12.1系统):


ncurses中的终端配置有两种风格,这取决于ncurses是使用terminfo支持还是termcap支持编译的

无论哪种方式,
has_colors()
都是一个函数,它根据您对
术语
环境变量使用的值来查询curses数据库(终端根据终端的行为控制数据库)

xterm
的值可能不包含颜色控件,也可能是导致终端软件无法显示颜色的原因。只需将
术语
变量更改为如下内容:

TERM=xterm-color
然后再试一次。该终端定义包括颜色支持,并使
具有_colors()
以返回
true

编辑 从我自己的termcap文件(基于FreeBSD 12.1系统):


Welp那本手册有误导性。你的
echo$TERM
是什么?@Amadan它是xterm
infocmp-lxterm
说什么?这将转储ncurses用于确定是否支持颜色的xterm的功能-应该有“设置背景”之类的功能?这意味着您的终端不支持配置的颜色。例如,您可能使用了
TERM=xterm
而不是
TERM=xterm color
。Welp该手册有误导性。你的
echo$TERM
是什么?@Amadan它是xterm
infocmp-lxterm
说什么?这将转储ncurses用于确定是否支持颜色的xterm的功能-应该有“设置背景”之类的功能?这意味着您的终端不支持配置的颜色。例如,您可能使用了
TERM=xterm
而不是
TERM=xterm color
。我遇到了与OP相同的问题,但这对我不起作用。最初的术语是xterm-256color,尝试设置为truecolor和xterm color,但都不起作用。可能您没有颜色xterm的规范。我将从我的termcap文件中编辑一个在我的计算机上运行的文件。我与OP有相同的问题,但这对我不起作用。最初的术语是xterm-256color,尝试设置为truecolor和xterm color,但都不起作用。可能您没有颜色xterm的规范。我将从我的termcap文件中编辑一个在我的计算机上运行的文件。