abcarroll / simple-ansi-escape
直观地使用 ANSI 转义序列为您的 php-cli 脚本添加颜色和格式
Requires
- php: >=5.5.0
This package is auto-updated.
Last update: 2024-09-18 05:39:16 UTC
README
使用 ANSI 转义码,您可以为 php5-cli 所使用的终端添加颜色和格式。Simple-Ansi-Escape 是一个简单的类,可以将神秘的 ANSI 转义码转换为易于记忆的友好别名。
Simple-Ansi-Escape 尽可能直观且参数灵活。正如其名所示,它也非常简单。它只包含一个类定义,其中包含一个静态公共方法 ansiEscape()
。Simple-Ansi-Escape 支持大多数标准 ANSI 转义码和一些非标准转义码。然而,它不支持 xterm-256 扩展(目前尚不支持)。
简单用法
与存储库一起提供了更深入和更实用的教程,请参阅 extras/tutorial.php
。运行它,并阅读源代码。
有一个名为 SimpleAnsiEscape
的类,它定义了一个静态公共函数 SimpleAnsiEscape::ansiEscape()
。如果您使用的是 PSR-4 兼容的自动加载器,只需两行代码即可开始使用鲜艳的黄色闪烁文本
use SimpleAnsiEscape\SimpleAnsiEscape as esc; echo esc::ansiEscape('color/yellow, blink', "I hope you enjoy Simple-Ansi-Escape!");
完整原型位于命名空间 SimpleAnsiEscape
SimpleAnsiEscape::ansiEscape( [ array|string $formatting, [ $wrapAround = null ] ] )
::ansiEscape()
尽可能灵活地接受您传递的内容。第一个参数可以是包含一个或多个数组元素的数组,或者是一个字符串。在其数组形式中,每个数组元素应对应于一个单独的 转义别名,如上一个示例中的 "color/yellow"。在其字符串形式中,您可以通过逗号、空格或分号分隔 转义别名。示例
// In the array form, one-parameter syntax: echo esc::ansiEscape(array('color/blue', 'faint', 'underline')), "I hope you enjoy Simple-Ansi-Escape!"); // The same thing, as a string: echo esc::ansiEscape('color/blue, faint, underline', "I hope you enjoy Simple-Ansi-Escape!"); // You can use commas, spaces, or semi-colons as well. Although it looks poor, even // mixing and matching will not confuse Simple-Ansi-Escape: echo esc::ansiEscape('color/red faint; underline, bold', "I hope you enjoy Simple-Ansi-Escape!");
没有参数时,它与 `::ansiEscape('reset')` 同义,并将重置所有打开的格式。
您还可以使用 ::ansiEscape()
与单个参数一起输出仅包含转义码的内容。当使用单个参数调用时,不会自动调用 ANSI 重置。虽然您需要自己调用重置(通过调用没有参数的 ::ansiEscape()
),但这样做可以使嵌套变得更容易
请注意,您不能在同一个函数调用中嵌套,但通过几个额外的调用可以轻松嵌套
// This is INCORRECT. The inner escape will terminate formatting and ' properly' will be // in the default terminal style. echo esc::ansiEscape( 'text/green', "This is NOT how you " . esc::ansiEscape('bold', 'nest') . " properly!" ); // This is CORRECT. We're build the value in the proper linear order: echo esc::ansiEscape('text/green') . "This is how you ". esc::ansiEscape('bold') . "properly " . esc::ansiEscape('~bold') . "next formatting." . esc::ansiEscape();
总是重置
最后要注意的是:当使用 ANSI 转义码时,您正在发送由您的终端解释的小文本序列。终端并不知道 php5-cli 何时终止;因此,您必须确保没有打开的转义码,否则您的格式将溢出到终端,即使您的脚本已经终止。
如果您有一个彩色的 PS1
壳环境变量,您可能不会注意到这一点,所以请小心。在开发过程中,如果您弄乱了终端,只需运行 reset
壳命令即可从头开始。
格式化语法,名称
您可以使用字符 ~
、!
或 ^
来表示否定。例如,~bold
、!bold
和 ^bold
都是等效的,因为它们都删除加粗格式。并非所有序列都可以进行否定。背景和文本使用 'bg/default' 和 'color/default' 来重置为默认值。对于那些没有否定语法的序列,您必须简单地发送 ANSI 重置。
转义别名
转义别名是 AnsiEscape 的核心。在 extras/printEscAliases.php
中提供了一个脚本,它将打印一个类似于下表的表格,并显示演示排版,以便您可以测试终端的功能。
以下表格显示了最重要的(兼容的)转义别名。
不支持的和非标准的转义码
这些是我在现代终端中从未看到过工作的转义码。你可能会有更好的运气。
许可
代码根据2条款BSD许可证授权。