Меню

Цветной вывод терминал linux

Разукрашиваем вывод в консоли: теория и практика

Консоль привлекает многих своей минималистичностью и эстетикой, но даже в ней иногда хочется выделить определённый фрагмент, чтобы показать его роль или значимость. Например, отметить зелёным текстом сообщение об успешном выполнении операции или обозначить длинный текст ошибки курсивом. О том, как это делать, а также о реализации на питоне — читайте далее.

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

ANSI escape sequences или Управляющие последовательности ANSI — это стандарт, дающий возможность управлять курсором, цветами, начертание в текстовых консолях. Такие последовательности воспринимаются отрисовщиком терминала, как команды отображать последующий текст в определенном формате. Есть также последовательность, которая сбрасывает предыдущие команды, и отображение текста становиться обычным. Существует несколько форматов управляющих последовательностей, различающихся возможностями и появившимися в разных версиях кодировок. Поговорим об этих форматах подробнее.

8 основных цветов и стили

Для обычного пользователя разнообразия цветов этого формата будет более чем исчерпывающим. Но прежде чем задумываться о том, что терракотовый цвет гораздо круче красного, и он вам уж точно нужен, давайте разберемся, как устроена самая простая версия управляющей последовательности ANSI для форматирования текста.

Чтобы изменить текущий цвет шрифта или фона можно использовать следущий синтаксис:

  • Начинается управляющая последовательность с любого из этих трёх представлений: \x1b[ (hex) или \u001b[ (Unicode) или \033[ (oct)
  • Далее следуют аргументы, разделённые между собой ; (можно указывать в любом порядке)
  • В конце ставится буква m

Возможные аргументы

Модификатор Код
1 Жирный
2 Блеклый
3 Курсив
4 Подчёркнутый
5 Мигание
9 Зачёркнутый

Изменения цвета шрифта

Цвет Код
30 Чёрный
31 Красный
32 Зелёный
33 Жёлтый
34 Синий
35 Фиолетовый
36 Бирюзовый
37 Белый

Изменения цвета фона

Цвет Код
40 Чёрный
41 Красный
42 Зелёный
43 Жёлтый
44 Синий
45 Фиолетовый
46 Бирюзовый
47 Белый

Бонус: другие интересные модификаторы, которые могут поддерживаться не всеми платформами

Модификатор Код
38 RGB цвет (см. раздел «Совсем много цветов»)
21 Двойное подчёркивание
51 Обрамлённый
52 Окружённый
53 Надчёркнутый

Пример корректного синтаксиса: \033[3;36;44m . После вывода этой конструкции стиль будет изменён для всего последующего текста. Чтобы вернуться к изначальному состоянию можно использовать \033[0m , тогда весь текст с этого места вернётся к изначальному форматированию.

Давайте поэкспементируем. Для примеров я буду использовать Python.

Важно заметить, что форматирование повлияло и на консоль питона, а не только на ее вывод. Именно поэтому очень важно закрывать все «тэги» изменения форматирования.

Часто используемые сочетания (copy-paste-able)

Код Описание
\033[0m вернуться к начальному стилю
\033[31m \033[0m красный текст — для обозначения ошибок
\033[1;31m \033[0m жирный красный текст — для обозначения критических ошибок
\033[32m \033[0m зеленый текст — успешное выполнение
\033[3;31m \033[0m красный курсив — текст ошибки
\033[43m \033[0m выделение основного, как будто жёлтым маркером

Больше цветов: аж целых 256

Некоторые терминалы поддерживают вывод целых 256 цветов. Если команда echo $TERM выводит xterm-256color , то ваш терминал всё корректно обработает.

В этом формате синтаксис немного другой:

Для генерации кодов цветов можно использовать генератор.

А палитру доступных цветов можно увидеть на картинке ниже.

Совсем много цветов

Этот формат не всегда поддерживается стандартными консолями.

Некотрые будут негодовать: «256 цветов и нет моего любимого терракотового, какой ужас!». Для таких ценителей существует формат, который уже поддерживает 24 битные цвета (3 канала RGB по 256 градаций).
Для не ценителей поясню, что терракотовый кодируется как — (201, 100, 59) или #c9643b.
Синтаксис в этом формате выглядит вот так:

Python: Использование библиотеки Colorama

Библиотека Colorama позволяет форматировать текст, не запоминая коды цветов. Рассмотрим её использование на примере:

Style позволяет изменить стиль, Fore — цвет шрифта, Back — цвет фона. Использовать переменные из colorama нужно также, как и коды изменения стиля. Но плюс использования библиотеки в том, что Fore.RED более читаем, чем \033[0;31m

Если в colorama.init() указать параметр autoreset=True , то стиль будет автоматически сбрасываться (в конец каждого print будут добавлены сбрасывающие стили последовательности), поэтому вам не придётся об этом каждый раз вспоминать.

А что не так с Windows?

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

Но colorama.init() сделает всё за вас в большинстве версий Windows. Однако если вы используете другую операционную систему, то функцию init() вызывать в начале программы не обязательно. Также некоторые IDE на Windows (например, PyCharm) тоже поддерживают цвета без каких-либо махинаций.
А еще Windows не поддерживает многие модификаторы, такие как жирный текст. Подробнее можно почитать на странице Colorama

Termcolor

Ещё одна библиотека для вывода цветного текста с более удачным, на мой взлгяд, синтаксисом.

Кстати, проблему с Windows всё ещё можно починить с помощью colorama.init()

Выводы

Стандартные 8 цветов позволяют разнообразить вывод в консоль и расставить акценты. 256 цветов намного расширяют возможности, хотя и поддерживаются не всеми консолями. Windows, к сожалению, не поддерживает многие основные модификаторы, например, курсив. Также есть некоторые цвета, которые не прописаны в стандартах, но могут поддерживаться вашей операционной системой. Если вы хотите больше цветов, то вы можете поискать их в Гугле.
Пока что не любой терминал поддерживает 24-битные цвета и все модификаторы, но мы вряд ли увидим сильные изменения в этой сфере. Так что пока нам остаётся выбирать самые красивые варианты из тех, что доступны в любимом терминале.

Источники

Облачные серверы от Маклауд быстрые и безопасные.

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Источник

Цветовое оформление консольного вывода

Кратко о том, как сделать для своей консольной программы или скрипта цветной вывод текста, а также дополнить его другими элементами оформления. Собственно, назначить можно цвет текста, цвет фона под ним, сделать текст жирным, подчеркнутым, невидимым и даже мигающим.

Шаблон для использования в современных командных оболочках и языках программирования таков: \x1b[. m. Это ESCAPE-последовательность, где \x1b обозначает символ ESC (десятичный ASCII код 27), а вместо «. » подставляются значения из таблицы, приведенной ниже, причем они могут комбинироваться, тогда нужно их перечислить через точку с запятой.

атрибуты
нормальный режим
1 жирный
4 подчеркнутый
5 мигающий
7 инвертированные цвета
8 невидимый
цвет текста
30 черный
31 красный
32 зеленый
33 желтый
34 синий
35 пурпурный
36 голубой
37 белый
цвет фона
40 черный
41 красный
42 зеленый
43 желтый
44 синий
45 пурпурный
46 голубой
47 белый

Теперь несколько примеров. Все это можно опробовать, введя в консольном окне echo -e «текст примера» .

Ввод Результат
\x1b[31mTest\x1b[0m
\x1b[37;43mTest\x1b[0m
\x1b[4;35mTest\x1b[0m

Обратите внимание, что во всех трех случаях после слова Test идет последовательность \x1b[0m, которая просто сбрасывает стиль оформления на стандартный.

Источник

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

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

Contents

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

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

С помощью управляющих последовательностей 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 миллионов (2 24 ) цветов RGB (значение каждого канала в диапазоне от 0 до 255).

Termcap и terminfo

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

Приложения

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

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

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

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

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

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

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

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

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

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

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

Подробнее об опции —use-color можно почитать в less(1) или [1].

Чтение из stdin

/.zshrc ; примеры ниже основаны на export LESS=R

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

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

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

  • ColorThis — запускает программу в (группе) pty, поддерживает перенаправление stdin.

https://github.com/Sasasu/ColorThis || colorthis-gitAUR

  • stdoutisatty — перехватывает обращение к функции isatty .

https://github.com/lilydjwg/stdoutisatty. || stdoutisatty-gitAUR Пример: stdoutisatty программа | less

  • unbuffer — tclsh-скрипт, который поставляется с expect, запускает программу в pty.

http://expect.sourceforge.net/example/unbuffer.man.html || expect Пример: unbuffer программа | less

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

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

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

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

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

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

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

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

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

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

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

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

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

В файле /etc/man_db.conf раскомментируйте параметр pager и установите ему значение most -s :

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

Настройка цветов осуществляется в пользовательском файле

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

Полный список сочетаний клавиш можно посмотреть в /usr/share/doc/most/most-fun.txt . Чтобы получить базовую less / vim -подобную конфигурацию, можно скопировать /usr/share/doc/most/lesskeys.rc в

/.mostrc . Этот файл не включает в себя ‘g’ или ‘G’, так что нужно добавить следующие строки в

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

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

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

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

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

xterm

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

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

rxvt-unicode

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

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

pacman

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

Обёртки

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

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

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

  • rainbow — раскрашивает вывод команд или STDIN по паттернам.
    Пресеты: df, diff, env, host, ifconfig, java-stack-trace, jboss, jonas, md5sum, mvn2, mvn3, ping, tomcat, top, traceroute.

https://github.com/nicoulaj/rainbow || rainbowAUR

  • 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

  • colorlogs — раскрашивает вывод команд или STDIN по паттернам.
    Пресеты: logs, git status, ant, maven.

https://github.com/memorius/colorlogs || not packaged? search in AUR

  • cope — раскрашивающая обёртка для консольных программ.
    Пресеты: acpi, arp, cc, df, dprofpp, fdisk, free, g++, gcc, id, ifconfig, ls, lspci, lsusb, make, md5sum, mpc, netstat, nm, nmap, nocope, ping, pmap, ps, readelf, route, screen, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shasum, socklist, stat, strace, tcpdump, tracepath, traceroute, w, wget, who, xrandr.

https://github.com/yogan/cope || cope-gitAUR

  • 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

  • ccze — быстрая раскраска журнала, написан на C, предназначен для замены colorize

https://github.com/cornet/ccze/ || ccze

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

  • libtextstyle — библиотека на C для стилизации текстового вывода в терминалах

https://www.gnu.org/software/gettext/libtextstyle/manual/index.html || gettext

  • ruby-rainbow — расширение для Ruby-класса String, добавляющее поддержку ANSI-цветов

https://rubygems.org/gems/rainbow/ || ruby-rainbow

  • python-blessings — тонкая обёртка для раскраски, стилизации и позиционирования

https://github.com/erikrose/blessings || python-blessings

  • lolcat — программа на Ruby, которая делает текст цветным как радуга

https://github.com/busyloop/lolcat/ || lolcat

Для отдельных приложений

Компиляторы

  • colorgcc — обёртка на Perl, раскрашивающая предупреждения и ошибки, соответствующие формату вывода gcc

https://schlueters.de/colorgcc.html || colorgcc

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

  • bat — клон cat с подсветкой синтаксиса и интеграцией с git.

https://github.com/sharkdp/bat || bat

source-highlight

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

lesspipe

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

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

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

Перелогиньтесь после установки lesspipe для его активации, или выполните source /etc/profile.d/lesspipe.sh .

  • colormake — простая обёртка над make, делающая его вывод более читабельным.

https://github.com/pagekite/Colormake/ || colormakeAUR

  • prettyping — добавляет некоторые крутые возможности для мониторинга пинга. Обёртка над стандартным ping, делающая вывод более красивым, цветным, компактным и лёгким для чтения.

https://denilson.sa.nom.br/prettyping/ || prettyping

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

xonsh

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

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

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

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

/.Xresources добавьте в настройках своей командной оболочки:

Окно входа

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

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

  • #Цветные страницы в xterm или rxvt-unicode о том, как автоматически раскрашивать жирный и подчёркнутый текст.
  • Color Themes — обширный список цветовых тем терминала от Phraktured.
  • Xcolors by dkeg (смотрите файлы theme/dkeg — тема в репозитории)
  • base16 color schemes

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

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

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

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

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

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

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

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

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

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

Поддержка True Color

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

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

Источник

Читайте также:  Как выполнить загрузку windows с флешки
Adblock
detector