1

我使用服务器上的 node-pty、客户端上的 ng-termianl (xterm.js) 和用于通信的 socket.io 向我的 Web 应用程序添加了一个终端。我基本上可以正常工作,但我有一些问题,也许我让事情变得复杂,所以这里有一些问题:

  1. 我需要在 xterm 中实现哪些任务以及我应该期望 node-pty 处理什么。
  • 创建一个历史缓冲区来处理向上/向下箭头。
  • 创建终端提示符
  • 手左右箭头
  1. 在 node-pty 中列出数据事件时,我得到了回显命令、响应和新的终端行。过滤掉任何不是对发出命令的响应的数据事件的最佳方法是什么?有时回显的命令是

  2. 如何为 node-pty 列数选择一个值?pty 列的数量是否需要与 xterm 中的列数匹配?如果用户在 xterm 中键入的命令很长,则回显的命令会在发出的命令的 pty 回显中混乱。

4

1 回答 1

3
  1. 我需要在 xterm 中实现哪些任务以及我应该期望 node-pty 处理什么。

xterm.js

  • Terminal.write那是应该写入来自 PTY 的传入数据的位置。
  • Terminal.onData包含来自用户的数据的事件(终端上的键盘输入)。应写入 PTY。

这些是获得有效 PTY 连接的最低要求。还有更多的好东西,比如插件,可以获得更全面的体验。另请参阅 repo 中的演示项目

PTY
主端的 PTY 主要有 2 个有趣的接口部分 - IO 字节流(现在可以假定为 UTF8)和获取/设置终端大小的方法。

  • 创建一个历史缓冲区来处理向上/向下箭头。
  • 创建终端提示符
  • 手左右箭头

对于在 TTY 接口后面驱动的终端(PTY 是一种特殊情况),这些事情由当前在前台运行的应用程序处理(如 shell 本身)。前台应用程序控制历史缓冲区、提示打印、如何使用箭头键等。作为 cmdline 应用程序开发人员,您可能会关心这些事情(PTY 的从属端),但作为终端集成商(PTY 的主控端)则不然。

  1. 在 node-pty 中列出数据事件时,我得到了回显命令、响应和新的终端行。过滤掉任何不是对发出命令的响应的数据事件的最佳方法是什么?有时回显的命令是

xterm.js 是一个哑终端,因此无法直接从用户输入中输出数据,而是依赖于适当的回显。回显本身是 TTY 内核接口的一项功能,不应被过滤,除非您想要静默输入(但这不是这样做的方法)。

  1. 如何为 node-pty 列数选择一个值?pty 列的数量是否需要与 xterm 中的列数匹配?如果用户在 xterm 中键入的命令很长,则回显的命令会在发出的命令的 pty 回显中混乱。

是的,在 xterm.js 和 PTY 上的大小columns x rows应该始终相同,否则会发生奇怪的输出错误。

于 2021-02-05T21:38:50.750 回答