admin管理员组文章数量:1034014
一个完全用PHP编写的终端模拟器
概述
这个仓库名为 Solo Screen
,是一个用纯 PHP 编写的终端渲染器,可用于在任何 PHP 应用程序中构建基于富文本的用户界面。以下是对该仓库的详细介绍:
Solo Screen
最初是为解决 Solo for Laravel 中的特定问题而创建的。它能处理文本和 ANSI 转义序列,创建终端输出的虚拟表示,专注于正确解释和渲染带有格式的文本内容,而不是处理输入、交互式会话或进程管理。
特点
- 纯 PHP 实现:仅依赖一个库 Grapheme。
- 全面的 ANSI 支持:处理光标定位、文本样式和屏幕操作。
- Unicode/多字节支持:正确处理 UTF - 8 字符,包括表情符号和宽字符。
- 缓冲区管理:维护用于文本内容和样式的独立缓冲区。
- 字符宽度处理:正确计算 CJK 和其他双宽度字符的显示宽度。
- 滚动功能:支持垂直滚动,并进行适当的内容管理。
安装
可以通过 Composer 进行安装:
代码语言:javascript代码运行次数:0运行复制composer require soloterm/screen
要求
- PHP 8.1 或更高版本
- mbstring 扩展
基本用法
代码语言:javascript代码运行次数:0运行复制开源技术小栈以下是一个简单的使用示例:
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();
核心概念
屏幕(Screen)
这是协调所有功能的主类,负责光标定位、内容写入和最终输出的渲染。
缓冲区(Buffers)
- PrintableBuffer:存储可见字符并处理宽度计算。
- AnsiBuffer:跟踪样式信息(颜色、加粗、下划线等)。
ANSI 处理
正确解释 ANSI 转义序列,包括光标移动、文本样式、屏幕清除和行操作、滚动等。
高级功能
光标定位
代码语言:javascript代码运行次数:0运行复制// 将光标移动到位置(第 5 行,第 10 列)
$screen->write("\e[5;10H");
// 将光标向上移动 3 行
$screen->write("\e[3A");
// 保存和恢复光标位置
$screen->write("\e7"); // 保存
$screen->write("More text");
$screen->write("\e8"); // 恢复
文本样式
代码语言:javascript代码运行次数:0运行复制// 加粗红色文本
$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");
屏幕操作
代码语言:javascript代码运行次数:0运行复制// 清屏
$screen->write("\e[2J");
// 从光标处清除到行尾
$screen->write("\e[0K");
// 插入行
$screen->write("\e[2L");
// 向上滚动
$screen->write("\e[2S");
自定义集成
可以通过设置回调来响应终端查询:
代码语言:javascript代码运行次数:0运行复制$screen->respondToQueriesVia(function($response) {
// 处理响应(如光标位置)
echo $response;
});
示例:构建简单 UI
代码语言:javascript代码运行次数:0运行复制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();
测试
该仓库包含一个全面的测试套件,具有独特的视觉比较系统。可以使用以下命令运行测试:
代码语言:javascript代码运行次数:0运行复制composer test
视觉测试
采用基于截图的创新测试方法,验证视觉输出,确保渲染结果与真实终端行为准确匹配。可以通过设置环境变量来启用截图测试:
代码语言:javascript代码运行次数:0运行复制ENABLE_SCREENSHOT_TESTING=1 composer test
代码语言:javascript代码运行次数:0运行复制ENABLE_SCREENSHOT_TESTING=2 composer test
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-26,如有侵权请联系 cloudcommunity@tencent 删除测试终端php渲染screen一个完全用PHP编写的终端模拟器
概述
这个仓库名为 Solo Screen
,是一个用纯 PHP 编写的终端渲染器,可用于在任何 PHP 应用程序中构建基于富文本的用户界面。以下是对该仓库的详细介绍:
Solo Screen
最初是为解决 Solo for Laravel 中的特定问题而创建的。它能处理文本和 ANSI 转义序列,创建终端输出的虚拟表示,专注于正确解释和渲染带有格式的文本内容,而不是处理输入、交互式会话或进程管理。
特点
- 纯 PHP 实现:仅依赖一个库 Grapheme。
- 全面的 ANSI 支持:处理光标定位、文本样式和屏幕操作。
- Unicode/多字节支持:正确处理 UTF - 8 字符,包括表情符号和宽字符。
- 缓冲区管理:维护用于文本内容和样式的独立缓冲区。
- 字符宽度处理:正确计算 CJK 和其他双宽度字符的显示宽度。
- 滚动功能:支持垂直滚动,并进行适当的内容管理。
安装
可以通过 Composer 进行安装:
代码语言:javascript代码运行次数:0运行复制composer require soloterm/screen
要求
- PHP 8.1 或更高版本
- mbstring 扩展
基本用法
代码语言:javascript代码运行次数:0运行复制开源技术小栈以下是一个简单的使用示例:
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();
核心概念
屏幕(Screen)
这是协调所有功能的主类,负责光标定位、内容写入和最终输出的渲染。
缓冲区(Buffers)
- PrintableBuffer:存储可见字符并处理宽度计算。
- AnsiBuffer:跟踪样式信息(颜色、加粗、下划线等)。
ANSI 处理
正确解释 ANSI 转义序列,包括光标移动、文本样式、屏幕清除和行操作、滚动等。
高级功能
光标定位
代码语言:javascript代码运行次数:0运行复制// 将光标移动到位置(第 5 行,第 10 列)
$screen->write("\e[5;10H");
// 将光标向上移动 3 行
$screen->write("\e[3A");
// 保存和恢复光标位置
$screen->write("\e7"); // 保存
$screen->write("More text");
$screen->write("\e8"); // 恢复
文本样式
代码语言:javascript代码运行次数:0运行复制// 加粗红色文本
$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");
屏幕操作
代码语言:javascript代码运行次数:0运行复制// 清屏
$screen->write("\e[2J");
// 从光标处清除到行尾
$screen->write("\e[0K");
// 插入行
$screen->write("\e[2L");
// 向上滚动
$screen->write("\e[2S");
自定义集成
可以通过设置回调来响应终端查询:
代码语言:javascript代码运行次数:0运行复制$screen->respondToQueriesVia(function($response) {
// 处理响应(如光标位置)
echo $response;
});
示例:构建简单 UI
代码语言:javascript代码运行次数:0运行复制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();
测试
该仓库包含一个全面的测试套件,具有独特的视觉比较系统。可以使用以下命令运行测试:
代码语言:javascript代码运行次数:0运行复制composer test
视觉测试
采用基于截图的创新测试方法,验证视觉输出,确保渲染结果与真实终端行为准确匹配。可以通过设置环境变量来启用截图测试:
代码语言:javascript代码运行次数:0运行复制ENABLE_SCREENSHOT_TESTING=1 composer test
代码语言:javascript代码运行次数:0运行复制ENABLE_SCREENSHOT_TESTING=2 composer test
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-26,如有侵权请联系 cloudcommunity@tencent 删除测试终端php渲染screen本文标签: 一个完全用PHP编写的终端模拟器
版权声明:本文标题:一个完全用PHP编写的终端模拟器 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1748111431a2255064.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论