使用xterm.js粘贴时只监听onData而不监听onKey

问题描述 投票:0回答:1

我正在编写一个带有 ssh 终端(xterm.js)的小型网络应用程序和一些代码块卡。用户可以通过单击命令按钮或只需输入或粘贴来在终端中执行命令。

我一开始使用的是onData,这个API允许我输入或粘贴,但无法激活特定事件,例如Ctrl + d断开连接。

onKey 看起来不错。我编写了下面的代码来附加关键事件,复制效果很好,但粘贴效果不佳。

term.attachCustomKeyEventHandler(function (e) {
    // Ctrl + Shift + C
    if (e.ctrlKey && e.shiftKey && (e.keyCode == 3)) {
      var copySucceeded = document.execCommand('copy');
      console.log('copy succeeded', copySucceeded);
      return false;
    }
    if (e.ctrlKey && e.shiftKey && e.keyCode == 'v') {
      var pasteSucceeded = document.execCommand('paste');
      console.log('paste succeeded', pasteSucceeded);
      return false;
    }
  });

这是我的问题:onKey 和 onData 都监听键盘事件。当同时使用这两个功能时,终端写入两次。无论如何,它只在粘贴时监听 onData。

  term.onKey(function (ev) {
    
    const char = ev; 
    console.log(ev)
    if(ev.key.charCodeAt(0)===4){
      //term.dispose();
      socket.disconnect();
    }
      socket.emit('key', ev.key);
  });

  term.onData(function(data){
    console.log(data);
    socket.emit('data',data);
  });
javascript event-handling xtermjs
1个回答
0
投票

如果您使用

onKey
,那么您可以简单地将“粘贴”事件处理程序添加到支持终端的文本区域,而不是使用
onData
进行粘贴事件。类似的东西

term.textarea.addEventListener("paste", on_paste)

其中

term
保存您当前的终端实例。

© www.soinside.com 2019 - 2024. All rights reserved.