这个仓库名为 Solo Screen
,是一个用纯 PHP 编写的终端渲染器,可用于在任何 PHP 应用程序中构建基于富文本的用户界面。以下是对该仓库的详细介绍:
Solo Screen
最初是为解决 Solo for Laravel 中的特定问题而创建的。它能处理文本和 ANSI 转义序列,创建终端输出的虚拟表示,专注于正确解释和渲染带有格式的文本内容,而不是处理输入、交互式会话或进程管理。
可以通过 Composer 进行安装:
composer require soloterm/screen
开源技术小栈以下是一个简单的使用示例:
use SoloTerm\Screen\Screen;
// 创建一个具有指定尺寸(列,行)的屏幕
$screen = new Screen(80, 24);
// 写入文本和 ANSI 转义序列
$screen->write("Hello, \e[1;32mWorld!\e[0m");
// 移动光标并添加更多文本
$screen->write("\e[5;10HPositioned text");
// 获取渲染后的内容
echo $screen->output();
这是协调所有功能的主类,负责光标定位、内容写入和最终输出的渲染。
正确解释 ANSI 转义序列,包括光标移动、文本样式、屏幕清除和行操作、滚动等。
// 将光标移动到位置(第 5 行,第 10 列)
$screen->write("\e[5;10H");
// 将光标向上移动 3 行
$screen->write("\e[3A");
// 保存和恢复光标位置
$screen->write("\e7"); // 保存
$screen->write("More text");
$screen->write("\e8"); // 恢复
// 加粗红色文本
$screen->write("\e[1;31mImportant message\e[0m");
// 背景颜色
$screen->write("\e[44mBlue background\e[0m");
// 256 色支持
$screen->write("\e[38;5;208mOrange text\e[0m");
// RGB 颜色
$screen->write("\e[38;2;255;100;0mCustom color\e[0m");
// 清屏
$screen->write("\e[2J");
// 从光标处清除到行尾
$screen->write("\e[0K");
// 插入行
$screen->write("\e[2L");
// 向上滚动
$screen->write("\e[2S");
可以通过设置回调来响应终端查询:
$screen->respondToQueriesVia(function($response) {
// 处理响应(如光标位置)
echo $response;
});
use SoloTerm\Screen\Screen;
$screen = new Screen(80, 24);
// 绘制边框
$screen->write("┌" . str_repeat("─", 78) . "┐\n");
for ($i = 0; $i < 22; $i++) {
$screen->write("│" . str_repeat(" ", 78) . "│\n");
}
$screen->write("└" . str_repeat("─", 78) . "┘");
// 添加标题
$screen->write("\e[1;30H\e[1;36mMy Application\e[0m");
// 添加一些内容
$screen->write("\e[5;5HWelcome to the application!");
$screen->write("\e[7;5HPress 'q' to quit.");
// 渲染
echo $screen->output();
该仓库包含一个全面的测试套件,具有独特的视觉比较系统。可以使用以下命令运行测试:
composer test
采用基于截图的创新测试方法,验证视觉输出,确保渲染结果与真实终端行为准确匹配。可以通过设置环境变量来启用截图测试:
ENABLE_SCREENSHOT_TESTING=1 composer test
ENABLE_SCREENSHOT_TESTING=2 composer test