Xtermjs получить текст

Используя xterm.js, как вы получаете текст в консоли (текст вводится с term.write(...) или другие методы).

Получение textContent HTML не работает, потому что html обрабатывает пробелы по-разному, а xtermjs обрабатывает цвета по-разному.

2 ответа

Решение

То, на что вы ссылаетесь - это содержимое буфера терминала.

На данный момент (xterm.js 3.2) не существует общедоступного API для извлечения содержимого буфера, поэтому вам придется обойти это.

Попытка получить содержимое через DOM не будет работать. Xterm.js использует элемент canvas начиная с версии 3.0 вместо элементов DOM div и текстовых узлов для повышения производительности.

Лучший способ сделать это с помощью публичного API - это прослушать data событие и работа с этим. data событие генерируется, когда порция данных отправляется на терминал для обработки.

Краткое решение, когдаrendererTypeявляется'dom'

      let terminal = new Terminal({
  cols: 60,
  rows: 60,
  useStyle: true,
  rendererType: 'dom', // default is canvas, use dom
});
let terminalBuffer = Array.from(terminal.element.querySelectorAll(".xterm-rows>div")) 
  .map(e=>Array.from(e.querySelectorAll("span"))
  .map(e=>e.textContent).join("") ).filter(e=>e!="").join("\n")
console.log(terminalBuffer.trim())
Другие вопросы по тегам