屏幕真彩色 Ubuntu 18.04 坏了

Screen truecolor Ubuntu 18.04 broke

我自己编译的为数不多的几个软件之一就是screen。我发现它倾向于比存储库中的版本更好地支持终端的一些现代功能。我这样做已经有一段时间了,没有太大问题。但是,在升级到 18.04 时,(true)colors 似乎已经损坏。

我 运行 这段打印彩虹的代码,它在裸 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 "3[48;2;%d;%d;%dm", r,g,b;
        printf "3[38;2;%d;%d;%dm", 255-r,255-g,255-b;
        printf "%s3[0m", substr(s,colnum+1,1);
    }
    printf "\n";
}'

但是,当我启动屏幕时,颜色是关闭的。好像没有回落到256色,而是颜色值不对。

我在重新编译屏幕之前看到了这种行为。看到问题后,我重新编译甚至破坏了我的 git 存储库并重新克隆和重新编译以尝试让事情正常进行,但无济于事。

想想哪里出了问题?我什至不确定哪个库可能对此负责,或者它如何与 konsole 但不是屏幕一起工作。

好看的颜色是这样的:

不好的颜色是这样的:

有人提醒我:这是屏幕错误(参见 source-repo):

tputs(tparm("\E[48;2;%d;%d;%dm", _r, _g, _b), 1, DoAddChar);

问题是它正在使用tparm处理3个参数,使用termcap语法。但是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 feature) makes it less portable than one might wish. For formatting output, termcap provides only tgoto,它正好使用两个参数。

跟进:已应用建议的改进 2018/11/18, after some discussion in this bug report