Экран truecolor Ubuntu 18.04 сломался - PullRequest
0 голосов
/ 13 июня 2018

Одной из немногих программ, которые я сам компилирую, является экран.Я обнаружил, что он поддерживает некоторые современные функции терминалов лучше, чем версия в репозиториях.Я делал это в течение некоторого времени без особых проблем.Однако при обновлении до 18.04 (true) цвета, кажется, перестали работать.

Я запускаю этот фрагмент кода для печати радуги, которая все еще работает в голой консоли:

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-репо, а затем снова клонировал и перекомпилировал, чтобы попытаться заставить все работать, но безрезультатно.

Мысли о том, где это пошло не так?Я даже не уверен, какая библиотека может за это отвечать, или как она может работать с konsole, но не с экраном.

Хорошие цвета выглядят так: good colors

Плохие цвета выглядят так: enter image description here

1 Ответ

0 голосов
/ 09 ноября 2018

Кто-то напомнил мне об этом: это ошибка на экране (см. 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 годасделал этот фрагмент кода устаревшим:

    + 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 (таких как * 1037)*tparm, который не является функцией termcap ), делает его менее портативным, чем хотелось бы.Для форматирования вывода termcap предоставляет только tgoto, в котором используются ровно два параметра.

Продолжение: предложенное улучшение было применено 2018/11/18 , после некоторого обсуждения в этом отчете об ошибке .

...