clue/term-react

基于 ReactPHP 的流式终端仿真器。

v1.4.0 2024-01-30 10:22 UTC

This package is auto-updated.

Last update: 2024-09-13 19:50:51 UTC


README

CI status installs on Packagist

基于 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 上,例如当用户按下特殊键时,如光标、HOMEEND 等键。

  • 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/hexdumpclue/caret-notation

  • 如果您想处理来自TTY的标准输入和输出(STDIN和STDOUT),您可能想使用clue/reactphp-stdio而不是使用此低级库。