Как раскрашивать и стилизовать вывод консоли

Дата обновления перевода 2024-07-16

Как раскрашивать и стилизовать вывод консоли

Используя цвета в выводе команды, вы можете отличать разные типы вывода (например, важные сообщения, заголовки, комментарии и др.).

Note

По умолчанию, команда консоли Windows не поддерживает раскрашивание вывода. Компонент Консоль отключает раскрашивание вывода для систем Windows, но если ваши команды вызывают другие скрипты, которые издают цветовые последоательности, то они будут неправильно отображены как сырые экранированные символы. Установите бесплатные приложения Cmder, ConEmu, ANSICON, Mintty (используемые по умолчанию в GitBash и Cygwin) или Hyper чтобы добавить поддержку раскрашивания в вашу команду консоли Windows.

Использование цветовых стилей

Когда вы выводите текст, вы можете окружить его тегами, чтобы раскрасить его вывод. Например:

1
2
3
4
5
6
7
8
9
10
11
// зелёный текст
$output->writeln('<info>foo</info>');

// жёлтый текст
$output->writeln('<comment>foo</comment>');

// чёрный текст на голубом фоне
$output->writeln('<question>foo</question>');

// белый текст на красном фоне
$output->writeln('<error>foo</error>');

Закрывающий тег можно заменить на </>, который отменяет все опции форматирования, установленные последним открытым тегом.

Возможно также определить ваши собственные стили, используя класс OutputFormatterStyle:

1
2
3
4
5
6
7
use Symfony\Component\Console\Formatter\OutputFormatterStyle;

// ...
$outputStyle = new OutputFormatterStyle('red', '#ff0', ['bold', 'blink']);
$output->getFormatter()->setStyle('fire', $outputStyle);

$output->writeln('<fire>foo</>');

Для цветов заднего и переднего плана доступны любые hex-цвета. Кроме того, поддерживаются таки именованные цвета: black, red, green, yellow, blue, magenta, cyan, white, gray, bright-red, bright-green, bright-yellow, bright-blue, bright-magenta, bright-cyan и bright-white.

Note

Если терминал не поддерживает истинные цвета, используется ближайший цвет, в зависимсти от возможностей терминала. Например, #c0392b деградирует до #d75f5f в 256-цветных терминалах, и до red - 8-цветных терминалах.

А доступные опции: bold, underscore, blink, reverse (включает режим "Обратного видео", когда меняются цвета переднего и заднего планов) и conceal (делает передний план бесцветным, что делает напечатанный текст невидимым - несмотря на то, что его можно выбрать и скопировать; эта опция часто используется, когда пользователя просят ввести чувствительную информацию).

Вы также можете установить эти цвета и опции прямо внутри тега имени:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// использование именованных цветов
$output->writeln('<fg=green>foo</>');

// использование истинных цветов
$output->writeln('<fg=#c0392b>foo</>');

// чёрный текст на голубом фоне
$output->writeln('<fg=black;bg=cyan>foo</>');

// жирный текст на жёлтом фоне
$output->writeln('<bg=yellow;options=bold>foo</>');

// жирный текст с нижним подчёркиванием
$output->writeln('<options=bold,underscore>foo</>');

Note

Если вам нужно отобразить тег буквально, то экранируйте его с помощью обратного слеша: \<info>, или используйте метод escape(), чтобы экранировать все теги, включённые в заданную строку.

Отображение нажимаемых ссылок

Команды могут использовать специальный тег <href>, чтобы отображать ссылки схоже с элементами веб-страниц <a>:

1
$output->writeln('<href=https://symfony.com>Symfony Homepage</>');

Если ваш терминал принадлежит к списку емуляторов терминала, поддерживающих ссылки, вы можете нажать на текст "Symfony Homepage", чтобы открыть его URL в вашем браузере по умолчанию. Иначе, вы увидите "Symfony Homepage" в качестве обычного текста, и URL будет утерян.