gpt4 book ai didi

putty - ncurses: init_color() 无效

转载 作者:行者123 更新时间:2023-12-05 01:44:02 24 4
gpt4 key购买 nike

尝试定义颜色对时,我得到了奇怪的结果。所有 256 种颜色都已定义,尝试使用 init_color() 更改任何颜色都没有影响。

我使用启用了 256 色的 Putty 和 TERM=xterm-256color(也是 putty-256color),使用 --enable-widec 和 --enable-ext-colors 编译的 ncurses 6.0。这表明所有颜色都已定义,并且 init_color() 即使成功也不会改变任何东西:

init_scr();
start_color();
if (has_colors() && COLORS == 256 && can_change_color()) {
NCURSES_COLOR_T f;
for (f = 1; f < 256; f++) {
if (init_pair(f, f, COLOR_BLACK) == ERR) break;
attron(COLOR_PAIR(f));
printw("(%d)", f);
attroff(COLOR_PAIR(f));
refresh();
}
getch();
clear();
for (f = 1; f < 256; f++) {
if (init_color(f, 0, 0, f*3) == ERR) break;
if (init_pair(f, f, COLOR_BLACK) == ERR) break;
attron(COLOR_PAIR(f));
printw("(%d)", f);
attroff(COLOR_PAIR(f));
refresh();
}
getch();
clear();
}

我读到默认颜色无法更改,但仅指 COLOR_BLACK 等 (0-7)。

这 256 种默认颜色在哪里定义,为什么我不能更改它们?如果无法更改它们,我可以使用定义的颜色,但前提是我可以依赖它们在任何支持 256 色的终端上都是相同的。

最佳答案

简而言之:PuTTY 不会那样做,ncurses 无法判断 PuTTY 是否可以...

长:

在 ncurses 中,init_color 函数检查它的参数(在给定的示例中,如果您的 $TERM 是“xterm-256color”,这些参数看起来没问题),以及检查终端描述是否具有initc (initialize_color) 能力。如果缺少或取消,ncurses 将返回错误。

但是,这只是终端描述。 ncurses 无法判断您是否选择了不正确或不适当的终端描述。

在快速检查中,PuTTY 不响应 initc 中使用的控制序列。这是一个已知的限制,如(更合适的)终端描述中所示 putty-256color由 ncurses 提供:

putty-256color|PuTTY 0.58 with xterm 256-colors,
use=xterm+256setaf, use=putty,

那个xterm+256setaf用于调色板为硬编码 的终端。 PuTTY 不是唯一同时设置 TERM=xterm` 并且无法更改其调色板的终端。如果您碰巧使用的是旧版本的终端数据库,您可能会被误导,因为该错误已在 2014 中修复。 :

# 2014-03-30
# * cancel ccc in putty-256color and konsole-256color for consistency
# with the cancelled initc capability (patch by Sven Zuhlsdorf).
# * add xterm+256setaf building block for various terminals which only
# get the 256-color feature half-implemented -TD
# * updated "st" entry (leaving the 0.1.1 version as "simpleterm") to
# 0.4.1 -TD
#

与开发人员设置 TERM=xterm(或 TERM=xterm-256color)的其他终端一样,它们与 xterm 之间存在差异.

进一步阅读:

关于putty - ncurses: init_color() 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47686906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com