clue / term-react
基于 ReactPHP 的流式终端仿真器。
Requires
- php: >=5.3
- react/stream: ^1.2
Requires (Dev)
- phpunit/phpunit: ^9.6 || ^5.7 || ^4.8.36
- react/event-loop: ^1.2
README
基于 ReactPHP 的流式终端仿真器。
目录
支持我们
我们在开发、维护和更新我们出色的开源项目上投入了大量的时间。您可以通过 成为 GitHub 赞助者 来帮助我们保持这种高质量的工作。赞助者将获得许多回报,有关详细信息,请参阅我们的 赞助页面。
让我们共同将这些项目提升到新的水平!🚀
用法
ControlCodeParser
类 ControlCodeParser(ReadableStreamInterface $input)
可以用于解析从输入流读取时的任何控制码字节序列(ANSI / VT100),并且它只返回其纯数据流。它包装一个给定的 ReadableStreamInterface
并通过相同的接口公开其纯数据。
<?php require __DIR__ . '/vendor/autoload.php'; $stdin = new React\Stream\ReadableResourceStream(STDIN); $stream = new Clue\React\Term\ControlCodeParser($stdin); $stream->on('data', function ($chunk) { var_dump($chunk); });
因此,您可以确信结果 data
事件永远不会包含任何控制码字节序列,并且可以像普通纯数据流一样处理。
React 的流会发出数据字符串块,不对任何字节序列做出假设。这些块不一定代表完整的控制码字节序列,因为一个序列可能被分成多个块。该类通过缓冲不完整的块来重新组装这些序列。
以下 C1 控制码 被支持,如 ISO/IEC 2022 中定义的那样。
-
CSI (控制序列引入符) 是最常见的控制码序列形式之一。例如,CSI 用于打印彩色控制台输出,也称为“ANSI 颜色代码”或更技术性的术语 SGR (选择图形表示)。CSI 代码也出现在
STDIN
上,例如当用户按下特殊键时,如光标、HOME
、END
等键。 -
OSC (操作系统命令) 是另一种常见的控制码序列形式。例如,OSC 用于更改窗口标题或窗口图标。
-
APC (应用程序程序控制)
-
DPS (设备控制字符串)
-
PM (隐私消息)
每个代码序列都会通过一个具有其原始字节序列的专用事件发出
$stream->on('csi', function ($sequence) { if ($sequence === "\x1B[A") { echo 'cursor UP pressed'; } else if ($sequence === "\x1B[B") { echo 'cursor DOWN pressed'; } }); $stream->on('osc', function ($sequence) { … }); $stream->on('apc', function ($sequence) { … }); $stream->on('dps', function ($sequence) { … }); $stream->on('pm', function ($sequence) { … });
其他未列出的 C1 控制码 通过仅发出它们的 2 字节序列得到支持。每个通用的 C1 代码都作为 c1
事件发出,并带有其原始 2 字节序列
$stream->on('c1', function ($sequence) { … });
所有其他 C0 控制码(也称为 ASCII 控制码)通过仅发出它们的单字节值得到支持。每个通用的 C0 代码都作为 c0
事件发出,并带有其原始的单字节值
$stream->on('c0', function ($code) { if ($code === "\n") { echo 'ENTER pressed'; } });
安装
安装此库的推荐方法是通过Composer。您对Composer不熟悉吗?初学者?
本项目遵循SemVer。这将安装最新支持版本。
composer require clue/term-react:^1.4
有关版本升级的详细信息,请参阅变更日志。
本项目旨在在任意平台上运行,因此不需要任何PHP扩展,并支持在从旧版PHP 5.3到当前PHP 8+和HHVM的版本上运行。强烈建议使用此项目支持的最新PHP版本。
测试
要运行测试套件,您首先需要克隆此仓库,然后通过Composer安装所有依赖项。
composer install
要运行测试套件,请转到项目根目录并运行:
vendor/bin/phpunit
许可证
本项目采用许可MIT许可。
你知道吗?我提供定制开发服务,并为发行版赞助和贡献发布发票。如有需要,请联系我(@clue)获取详细信息。
更多
-
如果您想了解更多关于处理数据流的信息,请参阅底层react/stream组件的文档。
-
如果您想处理UTF-8编码的控制台输入,您可能需要在生成的纯数据流上使用clue/reactphp-utf8。
-
如果您想显示或检查控制码,您可能需要在发出的控制字节序列上使用clue/hexdump或clue/caret-notation。
-
如果您想处理来自TTY的标准输入和输出(STDIN和STDOUT),您可能想使用clue/reactphp-stdio而不是使用此低级库。