xterm.js - получение текста текущей строки
Я развиваю маленький xterm.js
приложение (только начало), и мне интересно, как получить текст из текущей строки, когда пользователь нажимает ввод. Вот программа:
var term = new Terminal();
term.open(document.getElementById('terminal'));
term.prompt = () => {
term.write('\r\n$ ');
};
term.writeln('This is a shell emulator.');
term.prompt();
term.on('key', function(key, ev) {
const printable = !ev.altKey && !ev.altGraphKey && !ev.ctrlKey && !ev.metaKey;
if (ev.keyCode === 13) {
term.prompt();
console.log(curr_line);
var curr_line = ""
} else if (ev.keyCode === 8) {
// Do not delete the prompt
if (term.x > 2) {
curr_line = curr_line.slice(0, -1);
term.write('\b \b');
}
} else if (printable) {
curr_line += ev.key;
console.log(curr_line, ev.key)
term.write(key);
}
});
term.on('paste', function(data) {
term.write(data);
});
Пример взят с домашней страницы xterm.js (и изменен)
Как видите, моя попытка заключается в добавлении в строку текста каждый раз, когда я получаю key
событие (или удаление на забой). Тем не менее, это не работает, потому что это внутри асинхронной функции.
Есть ли xterm.js
поставляется с другой функцией, которая позволяет вам получить текущий контент строки, или есть другой обходной путь для этого? Мои поиски в Google были безрезультатны.
0 ответов
Не самое элегантное решение, но, переместив curr_line в глобальную область видимости, мы можем сохранить его постоянным между событиями "по ключу".
var term = new Terminal();
term.open(document.getElementById('terminal'));
term.prompt = () => {
term.write('\r\n$ ');
};
term.writeln('This is a shell emulator.');
term.prompt();
// Move curr_line outside of async scope.
var curr_line = '';
term.on('key', function(key, ev) {
const printable = !ev.altKey && !ev.altGraphKey && !ev.ctrlKey && !ev.metaKey;
if (ev.keyCode === 13) {
term.prompt();
console.log(curr_line);
curr_line = '';
} else if (ev.keyCode === 8) {
// Do not delete the prompt
if (term.x > 2) {
curr_line = curr_line.slice(0, -1);
term.write('\b \b');
}
} else if (printable) {
curr_line += ev.key;
console.log(curr_line, ev.key)
term.write(key);
}
});
term.on('paste', function(data) {
term.write(data);
});
Ваш вопрос возник в моем поиске аналогичного решения, поэтому спасибо за его отправку!:)