Xtermjs не может копировать и вставлять

Мне не удалось реализовать функцию копирования и вставки из API-интерфейсов xterm.js. Я хочу, чтобы терминал мог копировать строки из буфера обмена.

я использую

  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(), событие запускается, когда я нажимаю команду + V, и я вижу, что оно выводит строки вне терминала.

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

Но «данные» — это просто строка, и событие также запускается нажатием клавиши, поэтому term.onData будет конфликтовать с событием onKey(), и я не уверен, как установить условие для «данных», поскольку это не так. объект.


person 781850685    schedule 20.11.2019    source источник
comment
Можете ли вы опубликовать немного больше машинописного кода?   -  person Plochie    schedule 20.11.2019


Ответы (1)


Вы можете использовать Terminal.attachCustomKeyEventHandler для ctrl/cmd+c/v, чтобы перехватить нажатие клавиши и предотвратить его оценку терминалом.

В этом обработчике вы можете обрабатывать нажатия клавиш и использовать соответствующие веб-API для копирования и вставки текста (document.execCommand или предпочтительно navigator.clipboard).

person Daniel Imms    schedule 22.11.2019