【问题标题】:Xtermjs can not copy & pasteXtermjs 无法复制和粘贴
【发布时间】:2019-11-20 07:23:44
【问题描述】:

我无法从 xterm.js API 实现复制和粘贴功能。我希望终端能够从剪贴板复制字符串。

我正在使用

  this.term.onKey((key) => {
    if (key.domEvent.code === 'KeyC'){
     if (key.domEvent.ctrlKey) {
     this.copiedText = this.term.getSelection();
    }
   } else if (key.domEvent.code === 'KeyV'){
     if (key.domEvent.ctrlKey) {
     this.term.write(this.copiedText);
    } 
   }
  }

但它只能在终端中获取复制文本,并且按键事件无法检测到 MAC 上的命令键(我现在使用的是 ctl + c & ctl + v)

如果我使用 onData(),当我按下 command + V 时触发事件,我可以看到它在终端外输出字符串

  this.term.onData((data) => {
    console.log(data.toString());  // prints "strings I copied with command + c"
  });

但是“数据”只是一个字符串,事件也是由按键触发的,所以 term.onData 会与 onKey() 事件发生冲突,我不确定如何在“数据”上设置条件,因为它不是一个对象。

【问题讨论】:

  • 你能多贴一点打字稿代码吗?

标签: angular typescript xtermjs


【解决方案1】:

您可以使用Terminal.attachCustomKeyEventHandler for ctrl/cmd+c/v 来拦截按键并防止它被终端评估。

在该处理程序中,您可以处理按键并使用相关的 Web API 复制和粘贴文本(document.execCommand 或最好是 navigator.clipboard)。