Xtermjs 如何组合节点pty和xterm

Xtermjs 如何组合节点pty和xterm,xtermjs,node-pty,Xtermjs,Node Pty,我使用服务器上的node pty、客户端上的ng termianl(xterm.js)和用于通信的socket.io向web应用程序添加了一个终端。我基本上能工作,但我有一些问题,可能我把事情弄得很复杂,所以这里有一些问题: 我需要在xterm中实现哪些任务,以及我应该期望node pty处理哪些任务 创建历史缓冲区以处理上/下箭头 创建终端提示 左右手箭头 当在node pty中列出数据事件时,我会得到回显命令、响应和新的终端行。过滤掉任何不是已发出命令响应的数据事件的最佳方法是什么?有时

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

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

  • 如何选择节点pty列计数的值?pty列数是否需要与xterm中的列数匹配?如果用户在xterm中键入的命令很长,则发出的命令的pty echo中的回显命令会混乱

  • 我需要在xterm中实现哪些任务,以及我应该期望node pty处理哪些任务
  • xterm.js

    • Terminal.write
      这是PTY输入数据的写入位置
    • Terminal.onData
      包含用户数据的事件(终端上的键盘输入)。应写信给PTY
    这些是获得工作PTY连接的最低要求。有更多像插件这样的好东西可以获得更全面的体验。另见回购协议中的条款

    私人股本
    主机端的PTY主要有两个有趣的接口部分——IO字节流(现在可以假定为UTF8)和获取/设置终端大小的方法

    • 创建历史缓冲区以处理上/下箭头
    • 创建终端提示
    • 左右手箭头
    对于TTY接口后面驱动的终端(PTY是一个特例),这些事情由当前在前台运行的应用程序(如shell本身)处理。前台应用程序控制历史缓冲区、提示打印、箭头键操作等。作为cmdline应用程序开发人员,您可能会关心这些事情(PTY的从属端),但作为终端集成商(PTY的主端),您可能不会关心这些事情

  • 当在node pty中列出数据事件时,我会得到回显命令、响应和新的终端行。过滤掉任何不是已发出命令响应的数据事件的最佳方法是什么?有时回显命令是无效的
  • js是一个哑终端,因此无法直接从用户输入输出数据,而是依赖于正确的回显。回声本身是TTY内核接口的一个特性,不应该被过滤,除非您想要静默输入(但这不是实现它的方法)

  • 如何选择节点pty列计数的值?pty列数是否需要与xterm中的列数匹配?如果用户在xterm中键入的命令很长,则发出的命令的pty echo中的回显命令会混乱

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

    重新发明轮子需要大量的工作。另一种选择是将xterm.js连接到节点pty进程,并提供一个实际的终端。