【问题标题】:How to combine node-pty and xterm如何结合 node-pty 和 xterm
【发布时间】:2021-05-09 12:19:13
【问题描述】:

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

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

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

【问题讨论】:

  • 重新发明轮子需要做很多工作。另一种选择是将 xterm.js 连接到 node-pty 进程并有一个实际的终端可用。

标签: xtermjs node-pty


【解决方案1】:
  1. 我需要在 xterm 中实现哪些任务以及我应该期望 node-pty 处理什么。

xterm.js

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

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

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2017-05-30
    相关资源
    最近更新 更多