Color output in console (Русский)

Эта страница описывает настройку вывода цветного текста в различных консольных программах.

Состояние перевода: На этой странице представлен перевод статьи Color output in console. Дата последней синхронизации: 17 сентября 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Как это работает

Управляющие последовательности

С помощью управляющих последовательностей ANSI (ANSI escape sequences) можно передать дополнительную информацию в вывод терминала, в том числе цвет. С годами диапазон цветов терминала значительно расширился: от изначальных восьми цветов до полного 24-битного True Color.

Базовое кодирование цвета даёт 8 цветов обычной яркости и 8 ярких вариантов этих цветов. Современные эмуляторы терминала, в том числе сама Linux-консоль, дают возможность указать конкретные RGB-значения, которые будут использоваться для отображения этих цветом. Этот режим поддерживается почти всеми эмуляторами терминала.

С появлением 256-цветных дисплеев появились последовательности для 256 цветов. Это 16 основных цветов, 216 цветов RGB (размещенных в кубе 6x6x6) и 24 оттенка серого. За исключением первых 16 цветов, схема обычно не настраивается, поскольку она имеет чёткое сопоставление с RGB. Этот режим поддерживается большинством эмуляторов терминала. (Меньшая часть эмуляторов использует аналогичную, но несовместимую кодировку только с 88 цветами. Вы вряд ли будете использовать их на практике, но они появятся в базе данных terminfo.)

Не так широко поддерживается True Color режим, дающий 16.7 миллионов (224) цветов RGB (значение каждого канала в диапазоне от 0 до 255).

Termcap и terminfo

Termcap и terminfo, являющиеся частью ncurses, — это базы данных, дающие информацию о том, какие последовательности поддерживаются терминалом (который обычно прописан в переменной окружения TERM). Можно использовать команды tput(1) и infocmp(1) для чтения этих данных в командной строке.

Приложения

diff

С версии 3.4 у diffutils есть опция --color (GNU mailing list).

$ alias diff='diff --color=auto'

grep

Опция --color=auto включает выделение цветом. Цвет будет использоваться только при выводе в терминал; не в pipe или перенаправление.

Цветной вывод в grep также удобен при работе с regexp.

Можно использовать alias, чтобы прописать постоянное использование этой опции:

alias grep='grep --color=auto'

Переменная позволяет определить цвета и настроить разные части выделения. Чтобы изменить цвета, найдите нужные управляющие последовательности ANSI и используйте их. Подробнее смотрите .

Опция включает вывод номеров строк файла.

ip

Команда из пакета iproute2 имеет опцию -c для включения цвета. Значение этого параметра включит вывод цвета только в терминале.

alias ip='ip -color=auto'

Переменные окружения

Можно попросить less использовать цвета для обозначения жирного текста и других эффектов форматирования.

Добавьте эту строку в настройках вашей командной оболочки:

export LESS='-R --use-color -Dd+r$Du+b'

Она задаст красный цвет для жирного и синий для подчёркивания.

Подробнее об опции можно почитать в или .

Чтение из stdin

Когда вы выполняете команду и направляете её стандартный вывод (stdout) в less для постраничного просмотра (например, ), вы можете заметить, что цвет пропадает. Обычно это из-за того, что программа пытается определить, является ли stdout интерактивным терминалом, и если да, то печатает цветой текст, а если нет, то не цветной. Это правильное поведение, когда вы хотите перенаправить stdout в файл, например , но не очень хорошо не в случае с .

Некоторые программы имеют опцию для отключения определения интерактивного tty:

# dmesg --color=always | less

Если у программы нет подобной опции, можно заставить программу считать stdout интерактивным терминалом с помощью следующих утилит:

  • stdoutisatty перехватывает обращение к функции isatty.
https://github.com/lilydjwg/stdoutisatty. || stdoutisatty-gitAUR
Пример:
  • unbuffer tclsh-скрипт, который поставляется с expect, запускает программу в pty.
http://expect.sourceforge.net/example/unbuffer.man.html || expect
Пример:

В качестве альтернативы можно использовать модуль zpty из zsh:

Использование:

$ ptyless программа

Для перенаправления в какой-нибудь другой просмотрщик (в данном примере less):

$ pty программа | less

ls

Опция --color=auto включает подсвечивание цветом. Цвет будет использоваться только при выводе в терминал; не в pipe или перенаправление.

alias ls='ls --color=auto'

Переменная позволяет определить цвета и настроить разные части выделения. Используйте для установки.

Подробнее смотрите .

man

There is a real color facility in , but it is strongly discouraged for man pages. Here we fake a colored man by hacking two main pagers, and : we replace the sequences for bold, standout, and underline with spiced ones that contain color.

Текст man-страниц может отображаться в разных цветах, что упрощает их чтение. Есть два основных метода, позволяющих раскрасить страницы — с помощью утилит less и most.

С помощью less (рекомендуется)

Преимущество этого способа в том, что less имеет более богатый набор возможностей, чем most, а также используется по умолчанию для отображения man-страниц.

Смотрите #less для более детального описания.

export MANPAGER="less -R --use-color -Dd+r -Du+b"

Для Fish настройки будут выглядеть как-то так:

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

С помощью most (не рекомендуется)

Утилита most выполняет ту же задачу, что и , но имеет меньший набор возможностей. Настройка цветов для most проще, однако требуется дополнительная настройка для того, чтобы most работал наподобие less.

Установите пакет most.

В файле раскомментируйте параметр и установите ему значение :

DEFINE     pager     most -s

Откройте любую man-страницу для проверки.

Настройка цветов осуществляется в пользовательском файле (нужно создать, если он отсутствует), либо в системном файле /etc/most.conf. Пример конфигурации:

% Color settings
color normal lightgray black
color status yellow blue
color underline yellow black
color overstrike brightblue black

Полный список сочетаний клавиш можно посмотреть в . Чтобы получить базовую /-подобную конфигурацию, можно скопировать в . Этот файл не включает в себя 'g' или 'G', так что нужно добавить следующие строки в :

setkey bob "g"
setkey eob "G"
setkey page_down "d"
setkey page_up "u"

Также можно задать сочетание клавиш для , если вам не нравится стандартное 'J'.

Другой пример, показывающий, как настроить сочетания клавиш, подобно (переход к строке назначен на клавишу ):

% less-like keybindings
unsetkey "^K"
unsetkey "g"
unsetkey "G"
unsetkey ":"

setkey next_file ":n"
setkey find_file ":e"
setkey next_file ":p"
setkey toggle_options ":o"
setkey toggle_case ":c"
setkey delete_file ":d"
setkey exit ":q"

setkey bob "g"
setkey eob "G"
setkey down "e"
setkey down "E"
setkey down "j"
setkey down "^N"
setkey up "y"
setkey up "^Y"
setkey up "k"
setkey up "^P"
setkey up "^K"
setkey page_down "f"
setkey page_down "^F"
setkey page_up "b"
setkey page_up "^B"
setkey other_window "z"
setkey other_window "w"
setkey search_backward "?"
setkey bob "p"
setkey goto_mark "'"
setkey find_file "E"
setkey edit "v"

Цветные страницы в xterm или rxvt-unicode

Быстрый способ раскрасить цвета man-страниц, которые просматриваются через / uxterm или , заключается в редактировании файла .

В подразделах представлена конфигурация для xterm и rxvt-unicode.

xterm
*VT100.colorBDMode:     true
*VT100.colorBD:         red
*VT100.colorULMode:     true
*VT100.colorUL:         cyan

Эти настройки заменяют начертания текста цветами. Добавьте также:

*VT100.veryBoldColors: 6

если вы хотите видеть цвета и начертания одновременно. Смотрите также xterm(1) для описания ресурса терминала .

rxvt-unicode

Конфигурация:

URxvt.colorIT:      #87af5f
URxvt.colorBD:      #d7d7d7
URxvt.colorUL:      #87afd7

После внесения изменений в файл, выполните:

$ xrdb -load ~/.Xresources

Запустите /uxterm или и вы должны увидеть цветные man-страницы. Эти настройки добавляют цвета для слов, написанных полужирным и подчеркнутым шрифтом в , и цвета для слов в полужирном, подчеркнутом, и наклонном начертаниях в . Вы можете также совмещать эти атрибуты в различные комбинации. Смотрите sources.

pacman

Pacman также имеет опцию для вывода цвета. Раскомментируйте строку в файле .

Обёртки

Универсальные обёртки

(многие давно не обновлялись, но всё ещё работают)

Они поставляются с предварительно настроенными пресетами. Пресеты можно менять, можно создавать новые.

  • grc ещё один раскрашиватель для украшения ваших лог-файлов или вывода команд.
    Пресеты: cat, cvs, df, digg, gcc, g++, ls, ifconfig, make, mount, mtr, netstat, ping, ps, tail, traceroute, wdiff, blkid, du, dnf, docker, docker-machine, env, id, ip, iostat, last, lsattr, lsblk, lspci, lsmod, lsof, getfacl, getsebool, ulimit, uptime, nmap, fdisk, findmnt, free, semanage, sar, ss, sysctl, systemctl, stat, showmount, tune2fs and tcpdump.
https://github.com/garabik/grc || grc
  • cw ненавязчивая обёртка для популярных unix-команд. Оборачивает file, что может вызывать проблемы.
    Пресеты: arp, arping, auth.log@, blockdev, cal, cksum, clock, configure, cpuinfo@, crontab@, cw-pipe, cw-test.cgi, date, df, diff, dig, dmesg, du, env, figlet, file, find, finger, free, fstab@, fuser, g++, gcc, group@, groups, hdparm, hexdump, host, hosts@, id, ifconfig, inittab@, iptables, last, lastlog, lsattr, lsmod, lsof, ltrace-color, make, md5sum, meminfo@, messages@, mount, mpg123, netstat, nfsstat, nmap, nslookup, objdump, passwd@, ping, pmap, pmap_dump, praliases, profile@, protocols@, ps, pstree, quota, quotastats, resolv.conf@, route, routel, sdiff, services@, showmount, smbstatus, stat, strace-color, sysctl, syslog, tar, tcpdump, tracepath, traceroute, umount, uname, uptime, users, vmstat, w, wc, whereis, who, xferlog.
http://cwrapper.sourceforge.net/ || cwAUR

    Библиотеки для раскраски вывода

    Компиляторы

      diff

      Diff имеет встроенную поддержку цветов, что разумно использовать. Но эти обёртки тоже можно использовать:

      • cwdiff обёртка над (w)diff с поддержкой каталогов.
      https://github.com/junghans/cwdiff || cwdiffAUR

        cat

          source-highlight

          В less можно добавить подсветку синтаксиса. Установите пакет source-highlight и добавьте в настройки вашей командной оболочки:

          lesspipe

          Активным пользователям командной строки может быть интересен .

          С помощью него можно просматривать список файлов в архиве:

          lesspipe также добавляет к less возможность взаимодействия с файлами отличными от архивов, предоставляя альтернативу для конкретной команды, ассоциированной с этим типом файлов (вроде просмотра HTML через ).

          Перелогиньтесь после установки lesspipe для его активации, или выполните .

          Make

            Ping

            • prettyping добавляет некоторые крутые возможности для мониторинга пинга. Обёртка над стандартным ping, делающая вывод более красивым, цветным, компактным и лёгким для чтения.
            https://denilson.sa.nom.br/prettyping/ || prettyping

            Командные оболочки

            bash

            Смотрите Bash (Русский)/Prompt customization (Русский)#Цвета.

            Fish

            Смотрите Fish (Русский)#Веб-интерфейс.

            xonsh

            Смотрите Customizing the Prompt.

            zsh

            Смотрите Zsh (Русский)#Цвета.

            Эмуляторы терминала

            Виртуальная консоль

            Если виртуальная консоль Linux работает через фреймбуффер, её цвета можно изменить. Это делается путём записи управляющей последовательности , где это 16-ричный индекс цвета 0-F и это стандартный 16-ричный код RGB.

            Например, для переиспользования существующих цветов из добавьте в настройках своей командной оболочки:

            if [ "$TERM" = "linux" ]; then
                _SEDCMD='s/.*\*color\([0-9]\{1,\}\).*#\([0-9a-fA-F]\{6\}\).*/\1 \2/p'
                for i in $(sed -n "$_SEDCMD" $HOME/.Xresources | awk '$1 < 16 {printf "\\e]P%X%s", $1, $2}'); do
                    echo -en "$i"
                done
                clear
            fi

            Окно входа

            Это пример цветного экрана входа в . Сделайте резервную копию исходного файла mv /etc/issue /etc/issue.bak как root и создайте новый :

            \e[H\e[2J
                                                                         \e[1;30m| \e[34m\r \s
                  \e[36;1m/\\\\                        \e[37m||      \e[36m| =                 \e[30m|
                 \e[36m/  \\\\                       \e[37m||      \e[36m|                   \e[30m| \e[32m\t
                \e[1;36m/ \e[0;36m.. \e[1m\\\\   \e[37m//==\\\\\\ ||/= /==\\\\ ||/=\\\\  \e[36m| | |/\\\\ |  | \\\\ /  \e[30m| \e[32m\d
               \e[0;36m/ .  . \\\\ \e[37m||    || ||  ||     ||  ||  \e[36m| | |  | |  |   X   \e[1;30m|
              \e[0;36m/  .  .  \\\\ \e[37m\\\\\\==/| ||   \\\\==/ ||  ||  \e[36m| | |  |\  \\/|  / \\\\ \e[1;30m| \e[31m\U
             \e[0;36m/ ..    .. \\\\   \e[0;37mA simple, lightweight linux distribution.   \e[1;30m|
            \e[0;36m/_'        `_\\\\                                              \e[1;30m| \e[35m\l \e[0mon \e[1;33m\n
            \e[0m 

            Смотрите также:

            X

            Многие Xorg-терминалы, в том числе xterm and urxvt, поддерживают как минимум 16 цветов. Они могут быть изменены через X resources или через настройки, специфичные для терминала. Например:

            Смотрите также:

            Отображение 256-цветной палитры

            Печатает 256 цветов на экран.

            $ (x=`tput op` y=`printf %76s`;for i in {0..256};do o=00$i;echo -e ${o:${#o}-3:3} `tput setaf $i;tput setab $i`${y// /=}$x;done)

            Отображение управляющих последовательностей tput

            Замените на желаемую команду.

            $ ( strace -s5000 -e write tput op 2>&2 2>&1 ) | tee -a /dev/stderr | grep -o '"[^"]*"'
            033[\033[1;34m"\33[39;49m"\033[00m
            

            Просмотр числа поддерживаемых цветов

            Эта команда выведет вам список всех терминалов, известных базе terminfo, и число поддерживаемых ими цветов. Возможные значения: 8, 15, 16, 52, 64, 88 и 256.

            Просмотр возможностей терминала

            Эта команда покажет возможности вашего текущего терминала.

            Скрипты, выводящие схему цветов

            На странице есть скрипты, которые отобразят вашу текущую схему цветов.

            Поддержка True Color

            Некоторые терминалы поддерживают все 16 миллионов цветов (RGB, 8 бит на канал): xterm, console, st и т.д. Соответствующие значения TERM , , и.т.д понимает ncurses с версии 6.1 . Подробнее об эмуляторах терминала и приложениях, поддерживающих True Color, смотрите .

            Имейте в виду, что ядро Linux поддерживает управляющие последовательности SGR для True Color, но использовать это бессмысленно, потому что драйвер отобразит 24-битные цвета на 256-цветную палитру (смотрите функции , ). Поэтому в terminfo нет записи .

            Смотрите также

            gollark: Presumably, poor incentives to actually improve performance? Maybe their corporate structure is such that nobody can really work on crosscutting stuff like that and everyone does individual features.
            gollark: Solution; swap places somehow.
            gollark: And Macron can be compiled on 100% of computers.
            gollark: Suuure.
            gollark: Do desert temples contain Macron?
            This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.