admin管理员组

文章数量:1034014

一个完全用PHP编写的终端模拟器

概述

这个仓库名为 Solo Screen,是一个用纯 PHP 编写的终端渲染器,可用于在任何 PHP 应用程序中构建基于富文本的用户界面。以下是对该仓库的详细介绍:

Solo Screen 最初是为解决 Solo for Laravel 中的特定问题而创建的。它能处理文本和 ANSI 转义序列,创建终端输出的虚拟表示,专注于正确解释和渲染带有格式的文本内容,而不是处理输入、交互式会话或进程管理。

特点

  1. 纯 PHP 实现:仅依赖一个库 Grapheme。
  2. 全面的 ANSI 支持:处理光标定位、文本样式和屏幕操作。
  3. Unicode/多字节支持:正确处理 UTF - 8 字符,包括表情符号和宽字符。
  4. 缓冲区管理:维护用于文本内容和样式的独立缓冲区。
  5. 字符宽度处理:正确计算 CJK 和其他双宽度字符的显示宽度。
  6. 滚动功能:支持垂直滚动,并进行适当的内容管理。

安装

可以通过 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 转义序列,创建终端输出的虚拟表示,专注于正确解释和渲染带有格式的文本内容,而不是处理输入、交互式会话或进程管理。

特点

  1. 纯 PHP 实现:仅依赖一个库 Grapheme。
  2. 全面的 ANSI 支持:处理光标定位、文本样式和屏幕操作。
  3. Unicode/多字节支持:正确处理 UTF - 8 字符,包括表情符号和宽字符。
  4. 缓冲区管理:维护用于文本内容和样式的独立缓冲区。
  5. 字符宽度处理:正确计算 CJK 和其他双宽度字符的显示宽度。
  6. 滚动功能:支持垂直滚动,并进行适当的内容管理。

安装

可以通过 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编写的终端模拟器