abcarroll/simple-ansi-escape

直观地使用 ANSI 转义序列为您的 php-cli 脚本添加颜色和格式

v1.0 2015-06-28 02:55 UTC

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许可证授权。