bebat / console-color
将颜色和样式应用于命令行输出文本
Requires
- php: ^8.1
Requires (Dev)
- bebat/verify: ~3.1.1
- captainhook/captainhook: ~5.16.4
- captainhook/plugin-composer: ~5.3.3
- ergebnis/composer-normalize: ~2.33.0
- friendsofphp/php-cs-fixer: ^3.21.1
- maglnet/composer-require-checker: ~4.6.0
- mockery/mockery: ~1.6.2
- phpstan/extension-installer: ~1.3.1
- phpstan/phpstan: ~1.10.25
- phpstan/phpstan-deprecation-rules: ~1.1.3
- phpstan/phpstan-mockery: ~1.1.1
- phpstan/phpstan-phpunit: ~1.3.13
- phpstan/phpstan-strict-rules: ~1.5.1
- phpunit/phpunit: ~10.2.4
- zalas/phpunit-globals: ~3.1.2
This package is auto-updated.
Last update: 2024-08-26 22:57:21 UTC
README
Console Color 是一个轻量级的 PHP 8.1+ 库,用于在命令行文本中添加颜色和其他样式。
安装
可以通过 Composer 安装 Console Color 库
composer require bebat/console-color
基本用法
要将样式应用于文本,您需要一个 BeBat\ConsoleColor\Style
的实例。有了这个实例,您可以将样式对象应用于一些文本
use BeBat\ConsoleColor\Style; $style = new Style(); echo $style->apply('This text is green', Style\Color::Green) . PHP_EOL;
Style
类将尝试自动确定控制台输出是否可以应用样式(更多详细信息可以在环境变量部分找到 下面)。默认情况下,它检查 STDOUT
是否是 TTY。如果您使用的是不同的输出类型(例如 php://
I/O 流),您可以将其传递给 Style()
以确定该流是否支持样式
use BeBat\ConsoleColor\Style; $handle = fopen($something, 'w'); $style = new Style($handle); fwrite($handle, $style->apply( 'If $something points to a console this text will have a cyan background. ' . 'Otherwise it will just be plain.', Style\BackgroundColor::Cyan, ));
您可以使用 force()
方法使 Style
始终 将样式应用于文本,无论它是否认为输出资源支持它
use BeBat\ConsoleColor\Style; $handle = fopen($something, 'w'); $style = new Style($handle); $style->force(); fwrite($handle, $style->apply( 'This text will always have styling applied to it.', Style\Text::Bold, ));
环境变量
除了检查 STDOUT
是否是 TTY,Style
还将查看几个环境变量以确定是否应用样式以及用户的终端对样式的支持级别。
FORCE_COLOR
- 如果用户设置了FORCE_COLOR
,则即使Style
认为输出不是 TTY,也会应用样式。NO_COLOR
- 如果用户设置了NO_COLOR
,则禁用样式。NO_COLOR
比FORCE_COLOR
优先。TERM
-Style
将检查TERM
以确定它是否支持 256 色模式。COLORTERM
- 如果COLORTERM
设置为truecolor
,则Style
将应用基于 RGB 的颜色。
包含的样式
Style::apply()
接受一个 StyleInterface
的实例,Console Color 包含了许多实现此接口的样式。
要查看您的终端支持的样式及其外观,请运行包含的 sample.php
文件。
基本样式
Style\Text
、Style\Underline
、Style\Color
和 Style\BackgroundColor
是 受支持的枚举,这有助于使 Console Color 的 API 非常简洁。这些样式在大多数终端中具有最广泛的支持(有一些例外)。
文本
Style\Text::None
- 无样式Style\Text::Bold
- 加粗文本(在某些终端中也可能“加亮”颜色)Style\Text::Faint
- 淡色文本颜色Style\Text::Italic
- 斜体Style\Text::Underline
- 下划线Style\Text::Blink
- 闪烁文本(请谨慎使用 😊)Style\Text::Reverse
- 交换前景色和背景色Style\Text::Concealed
- 隐藏文本(它仍然存在并且可以被选中)Style\Text::Strike
- 删除线,不是所有终端都支持Style\Text::DoubleUnderline
- 双下划线或加粗下划线,不是所有终端都支持Style\Text::Overline
- 文本上方的线,不是所有终端都支持Style\Text::Superscript
- 上标文本,很少支持Style\Text::Subscript
- 下标文本,很少支持
下划线
自定义下划线样式并不被广泛支持,但某些终端包含它们。大多数,如果不是所有,都只能显示单一下划线。
样式\下划线::单下划线
样式\下划线::双下划线
样式\下划线::波浪线
样式\下划线::点状
样式\下划线::虚线
前景色和背景色
样式\颜色
和样式\背景颜色
都支持相同的值,并且具有相同的API。
样式\颜色::黑色
样式\颜色::红色
样式\颜色::绿色
样式\颜色::黄色
样式\颜色::蓝色
样式\颜色::品红色
样式\颜色::青色
样式\颜色::白色
样式\颜色::默认
样式\颜色::亮黑色
样式\颜色::亮红色
样式\颜色::亮绿色
样式\颜色::亮黄色
样式\颜色::亮蓝色
样式\颜色::亮品红色
样式\颜色::亮青色
样式\颜色::亮白色
256色和真彩色
大多数终端程序支持256色输出,现在许多也支持24位“真”色。控制台颜色可以通过样式\Color256
和样式\ColorRGB
类将这些颜色应用于前景、背景或下划线颜色。
样式\Color256::foreground(int $code)
- 将256色应用于文本样式\Color256::background(int $code)
- 将256色应用于背景样式\Color256::underline(int $code)
- 将256色应用于下划线(见以下复合样式)样式\ColorRGB::foreground(int $red, int $green, int $blue)
- 将RGB颜色应用于文本样式\ColorRGB::background(int $red, int $green, int $blue)
- 将RGB颜色应用于背景样式\ColorRGB::underline(int $red, int $green, int $blue)
- 将RGB颜色应用于下划线(见以下复合样式)
组合样式
可以使用样式\Composite
类将多个样式应用于文本。例如,要同时应用于前景和背景颜色
use BeBat\ConsoleColor\Style; $style = new Style(); echo $style->apply( 'This text is white on red', new Style\Composite(Style\Color::BrightWhite, Style\BackgroundColor::Red), ) . PHP_EOL;
如果要将颜色添加到下划线,则需要样式\Composite
use BeBat\ConsoleColor\Style; $style = new Style(); echo $style->apply( 'This text has a typo', new Style\Composite(Style\Underline::Wavy, Style\ColorRGB::underline(255, 0, 0)), ) . PHP_EOL;
样式\Composite
实际上可以接受您需要应用的所有样式
use BeBat\ConsoleColor\Style; $style = new Style(); echo $style->apply( "Please don't do this\n", new Style\Composite( Style\Text::Bold, Style\Text::Italic, Style\Text::Blink, Style\Color256::background(34), Style\Color256::foreground(227), ), );