Почему мои цвета не отображаются на всех терминалах?

Проблема в пробеле между словом FEATUREи открывающей скобкой Измените его на FEATURE(``authinfo')dnl, и он отлично работает

.
0
08.01.2020, 14:28
3 ответа

Эти коды должны работать:

    magenta=$(tput setaf 5)
    blue=$(tput setaf 4)
    cyan=$(tput setaf 6)
    green="$(tput setaf 2)"
    purple=$(tput setaf 5)
    red=$(tput setaf 1)
    white=$(tput setaf 7)
    yellow=$(tput setaf 3)
2
28.01.2020, 02:15

Возможности терминала не поддерживают цвета, кроме 8 основных. Я нашел этот фрагмент кода для проверки всех доступных цветов (source:tput setaf color table? Как определить цветовые коды?):

# Connector fifos directory
read TMPDIR < <(mktemp -d /dev/shm/bc_shell_XXXXXXX)

fd=3
# find next free fd
nextFd() { while [ -e /dev/fd/$fd ];do ((fd++)) ;done;printf -v $1 %d $fd;}

tputConnector() {
    mkfifo $TMPDIR/tput
    nextFd TPUTIN
    eval "exec $TPUTIN> >(LANG=C exec stdbuf -o0 tput -S - >$TMPDIR/tput 2>&1)"
    nextFd TPUTOUT
    eval "exec $TPUTOUT<$TMPDIR/tput"
}
myTput() { echo -e "$1\ncr" 1>&$TPUTIN && IFS= read -r -d $'\r' -u $TPUTOUT $2
}
tputConnector

myTput op op
myTput "setaf 7" grey
myTput "setaf 16" black
fore=("$black" "$grey")
for ((i=0; i<256; i++)) ;do
    myTput "setab $i" bgr
    printf "  %s%s  %3d  %s" "$bgr" "${fore[ i>231 && i<244||(i<17)&& (i%8<2)||
        (i>16&&i<232)&&((i-16)%6*11+(i-16)/6%6*14+(i-16)/36*10)<58
        ? 1 : 0 ]}" $i "$op"
    (( ((i<16||i>231) && ((i+1)%8==0)) || ((i>16&&i<232)&& ((i-15)%6==0)) )) &&
        printf "\n" ''
done

Ниже приведены выходные данные всех трех терминалов, которые я тестировал.

  • Oracle Linux со средой рабочего столаenter image description here

  • MobaXterm в Windowsenter image description here

  • шпатлевка для Windowsenter image description here

Значит, терминал не поддерживает цвета, кроме 8 основных. Чтобы быть безопасным и портативным, используйте только эти 8 цветов.

0
28.01.2020, 02:15

Вы должны настроить тип терминала как putty,putty-256colorилиputty-scoпри использовании PuTTY или вещей, основанных на нем, таких как MobaXTerm. Это единственные типы терминалов, чьи записи в базе данных terminfo правильно описывают PuTTY .

Широко распространено неверное предположение, что все эмуляторы терминала совместимы с XTerm и что записи xtermи xterm-256colorв базе данных terminfo правильно их описывают.

Это ошибочное мнение упоминается в FAQ Томаса Дики по XTerm , и стоит отметить, что записи xtermи xterm-256colorдаже не описывают все версии XTerm, не говоря уже о других эмуляторах терминала.

Запись puttyв базе данных terminfo описывает терминал, который поддерживает только 8 ECMA -48 цветов. Как, впрочем, и запись xterm. Но простое переключение с xtermнаxterm-256colourнеправильно . PuTTY отличается от XTerm.

На самом деле, PuTTY вполне способна индексировать цвета (256 цветов из палитры )с использованием управляющих последовательностей ISO/IEC 8613. Действительно, с 2017 года он вполне способен прямой цвет (24 -битный цвет RGB )с использованием управляющих последовательностей ISO/IEC 8613. Запись putty-256colourописывает первое. В terminfo нет возможности полностью описать последнее.

Используйте правильный тип клеммы , и tputбудет искать правильную управляющую последовательность.

Дополнительная литература

4
28.01.2020, 02:15

Теги

Похожие вопросы