【问题标题】:Screen truecolor Ubuntu 18.04 broke屏幕真彩 Ubuntu 18.04 坏了
【发布时间】:2018-11-22 09:36:30
【问题描述】:

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

我运行这段代码来打印彩虹,它仍然可以在裸机中工作:

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 色,而是颜色值错误。

我在重新编译屏幕之前看到了这种行为。看到这个问题后,我重新编译甚至 nuked 我的 git repo 并重新克隆和重新编译以尝试让事情正常工作,但无济于事。

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

好的颜色是这样的:

不好的颜色是这样的:

【问题讨论】:

  • 你在编译 screen 时使用的是 GNU Screen 的发布版本、git master 分支还是 screen-v4 分支? (出于好奇,与您的问题无关。:-)
  • 嗯,实际上,真彩色支持似乎只在 git master 分支中,所以我假设你正在使用那个。

标签: ncurses gnu-screen terminfo termcap


【解决方案1】:

有人提醒我:这是屏幕错误(见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 在 2017 年的一个bug-fixes 使那段代码过时了:

    + 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 screen,顺便说一下,是一个 termcap 应用程序,并混合在 terminfo 调用中(例如 tparm,即不是termcap 功能)使它不像人们希望的那样便携。对于格式化输出,termcap 只提供tgoto,它正好使用两个参数。

跟进:在此bug report 中进行了一些讨论后,应用了建议的改进2018/11/18

【讨论】:

  • 感谢您的帮助!很高兴看到这再次起作用(至少基于 30 秒的测试)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
相关资源
最近更新 更多