我自己编译的少数软件之一就是屏幕。我发现它倾向于支持终端的一些现代功能,而不是存储库中的版本。我已经做了一段时间了,没有太多问题。但是,在升级到18.04时,(真实)颜色似乎已经破裂。
我运行这段代码来打印一条彩虹,它仍然可以在一个裸的konsole中运行:
awk 'BEGIN{
s="/\\/\\/\\/\\/\\"; s=s s s s s s s s;
for (colnum = 0; colnum<77; colnum++) {
r = 255-(colnum*255/76);
g = (colnum*510/76);
b = (colnum*255/76);
if (g>255) g = 510-g;
printf "\033[48;2;%d;%d;%dm", r,g,b;
printf "\033[38;2;%d;%d;%dm", 255-r,255-g,255-b;
printf "%s\033[0m", substr(s,colnum+1,1);
}
printf "\n";
}'
然而,当我开始屏幕时,颜色已关闭。它似乎没有回落到256色,而是颜色值是错误的。
我在重新编译屏幕之前看到了这种行为。在看到这个问题后,我重新编译,甚至修改了我的git repo并重新克隆并重新编译以试图让事情正常工作,但无济于事。
关于这出错的想法?我甚至不确定哪个库可能对此负责,或者它如何与konsole一起使用而不是屏幕。
答案 0 :(得分:3)
有人提醒我这件事:这是屏幕上的错误(请参见source-repo):
tputs(tparm("\E[48;2;%d;%d;%dm", _r, _g, _b), 1, DoAddChar);
问题是它正在使用tparm
使用 termcap 语法处理 3 参数。但是 termcap 只能代表 2 个参数。要在 terminfo 中执行此操作,开发人员应已执行以下操作:
tputs(tparm("\E[48;2;%p1%d;%p2%d;%p3%dm", _r, _g, _b), 1, DoAddChar);
ncurses的bug-fixes在2017年期间使那段代码过时了:
+ improve _nc_tparm_analyze, using that to extend the checks made by
tic for reporting inconsistencies between the expected number of
parameters for a capability and the actual.
顺便说一句, GNU屏幕是一个 termcap 应用程序,并混入 terminfo 调用(例如 tparm
,而不是termcap功能)使其可移植性比人们期望的要差。为了格式化输出, termcap 仅提供tgoto
,它恰好使用两个参数。
后续行动:在对此2018/11/18进行了一些讨论之后,bug report应用了建议的改进措施。