Как проверить, может ли удар распечатать цвета

Я использую vi/nvi (НЕТ vim) потому что это просто и незаметно.

vim любит, когда так сильно звуковые сигналы его тяжелее и несколько неочевидный отключены. Я должен был физически удалить внутренний динамик компьютера, прежде чем в конечном счете найдено, который проложил под землей - касательно приблизительно, как сделать это :)

set vb t_vb=

Также я не использую окраску синтаксиса, серый по черному мне является самым красивым.

И возможно я слишком глуп для выяснения этого tangled-multi-key-pressed emacs путем только три сочетания клавиш, которые я помню, являются CTRL-ALT-DEL.

64
24.03.2011, 22:38
6 ответов

Идея состоит в том, чтобы мое приложение знало для не окраски вывода, если программа не может распечатать, скажем, вывод входа от через задание крона в файл, никакая потребность зарегистрироваться окрашенный выводом, но при выполнении вручную, мне нравится просматривать окрашенный вывод

В каком языке Вы пишете свое приложение?

Нормальный подход должен проверить, является ли устройство вывода tty, и если это, проверьте, окрашивает ли тот тип терминальных поддержек.

В bash, это было бы похоже

# check if stdout is a terminal...
if test -t 1; then

    # see if it supports colors...
    ncolors=$(tput colors)

    if test -n "$ncolors" && test $ncolors -ge 8; then
        bold="$(tput bold)"
        underline="$(tput smul)"
        standout="$(tput smso)"
        normal="$(tput sgr0)"
        black="$(tput setaf 0)"
        red="$(tput setaf 1)"
        green="$(tput setaf 2)"
        yellow="$(tput setaf 3)"
        blue="$(tput setaf 4)"
        magenta="$(tput setaf 5)"
        cyan="$(tput setaf 6)"
        white="$(tput setaf 7)"
    fi
fi

echo "${red}error${normal}"
echo "${green}success${normal}"

echo "${green}0.052${normal} ${bold}${green}2,816.00 kb${normal}"
# etc.

В C Вы должны сделать намного больше ввода, но можете достигнуть того же результата с помощью isatty и функций, перечисленных в man 3 terminfo.

70
27.01.2020, 19:32
  • 1
    ^^that^^ был точно, что я искал.Спасибо. –  Tim Kennedy 01.12.2011, 15:10
  • 2
    Спасибо за подсказку о tput. Это - действительно большой ответ. –  AmadeusDrZaius 04.03.2015, 21:38

Это должно быть достаточно:

$ tput colors

цвета tput объяснили:

При рассмотрении страницы справочника you'ill замечают это:

SYNOPSIS
       tput [-Ttype] capname [parms ... ]

И...

   capname
          indicates the capability from the terminfo database.  When term‐
          cap  support is compiled in, the termcap name for the capability
          is also accepted.

termcap colors находится в terminfo базе данных, таким образом, можно попросить ее. Если у Вас есть нулевой статус выхода, то termcap компилируется в. Но если у Вас есть что-то как:

$ tput unknowntermcap
tput: unknown terminfo capability 'unknowntermcap'
$ echo $?
4

Это показывает, что unknowntermcap не существует. Так, это:

$ tput colors
8
$ echo $?
0

Шоу, что Ваша команда была правильной.

Другие полезные пути:

  • В C можно просто использовать isatty и видеть, является ли это TTY
  • Посмотрите - ли это простой терминал, выглядящий переменной $TERM

Удачи

25
27.01.2020, 19:32
  • 1
    colors не документируется в tput страница справочника(!), таким образом, я должен искать число> = 8 в stdout или коде возврата 0? –  l0b0 24.03.2011, 09:43
  • 2
    Казался очевидным, но Ваш комментарий показывает, что это не. Я добавляю, что информация (кратко, цвета являются возможностью terminfo базы данных), –  D4RIO 24.03.2011, 17:36
  • 3
    colors возможность документируется в terminfo (5). Тестирование использования tput -T dumb colors, tput -T vt220 colors, tput -T linux colors, tput -T xterm colors предполагает, что общие ценности -1 (никакая цветная поддержка) и 8 (8 цветов). Обратите внимание, что это только применяется после проверки, что устройство вывода является терминалом (например. [ -t 1 ] или isatty). –  Mikel 25.03.2011, 02:20
  • 4
    Отметьте это tput colors возвраты, что локальная терминальная база данных думает о терминале. Это может или не может соответствовать тому, как что терминал может на самом деле сделать, специально для терминального типа xterm который прибывает во многие варианты (в пределах от черного цвета и белого цвета к 256 цветам). Примечание –  Gilles 'SO- stop being evil' 02.11.2011, 00:37

Идея состоит в том, чтобы мое приложение знало для не окраски вывода, если программа не может распечатать, скажем, вывод входа от через задание крона в файл, никакая потребность зарегистрироваться окрашенный выводом, но при выполнении вручную, мне нравится просматривать окрашенный вывод.

Для этого варианта использования, что обычно делают программы (например, GNU ls или GNU grep с --color=auto) должен использовать цвета, если их вывод идет в терминал и никакие цвета иначе. Терминалы, которые не поддерживают последовательности изменения цвета ANSI, достаточно редки, что приемлемо заставить их пользователей переопределить выбор по умолчанию. В любом случае удостоверьтесь, что Ваше приложение имеет опцию вызвать цвета на или прочь.

В сценарии оболочки использовать [ -t 1 ] протестировать, если стандартный вывод является терминалом.

# option processing has set $color to yes, no or auto
if [ $color = auto ]; then
  if [ -t 1 ]; then color=yes; else color=no; fi
fi

Из программы с помощью API C звонить isatty(1).

# option processing has set use_color to 0 for no, 1 for yes or 2 for auto
if (use_color == 2) use_color = isatty(1);
7
27.01.2020, 19:32

Выполняя команды как меньше и рассмотрение вывода из программы, как которая выводы с помощью цветов, вывод отображены неправильно,

[ESC [0; 32m0.052ESC [0m ESC [1; 32m2,816.00 kbESC[0m]

Попытайтесь использовать less --RAW-CONTROL-CHARS.

В этом примере я использую logtool, который печатает вывод с помощью цветов.

Без - НЕОБРАБОТАННЫЕ СИМВОЛЫ УПРАВЛЕНИЯ:

$ head -20 /var/log/messages | logtool | less
ESC[0mESC[0;37mMar 20 11:43:52ESC[0mESC[1;36m host1ESC[0mESC[0;37m rsyslogd:ESC[0m ^GESC[0;31mlast message repeated 14 timesESC[0mESC[0m

С - необработанный CHAR управления (Воображают это, находится в симпатичных цветах. Кроме того, я не уверен почему это ^G отображается.):

$ head -20 /var/log/messages | logtool | less --RAW-CONTROL-CHARS
Mar 20 11:43:52 host1 rsyslogd: ^Glast message repeated 14 times
5
27.01.2020, 19:32

Это было бы отказом less не будучи установленным интерпретировать Escape ANSI; искать R в $LESSOPTS. Что касается определения, если система знает, Ваш терминал может иметь дело с цветами, tput colors произведет или количество цветов, которые оно поддерживает или -1 если это не поддерживает цвета. (Обратите внимание, что некоторые терминалы могут использовать xterm вместо xterm-color как их терминальное описание, но все еще поддерживают цвета.)

3
27.01.2020, 19:32
  • 1
    Идея состоит в том, чтобы мое приложение знало для не окраски вывода, если программа не может распечатать, скажем, вывод входа от через задание крона в файл, никакая потребность зарегистрироваться окрашенный выводом, но при выполнении вручную, мне нравится просматривать окрашенный вывод. –  Angelo Vargas 23.03.2011, 17:28

Если Вы хотите добавить цвет для вывода, но только когда цвета поддерживаются, можно просто использовать tput. http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html

1
27.01.2020, 19:32

Теги

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