xterm.js - 获取当前行文本
xterm.js - Getting current line text
我正在开发一个小型 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 搜索没有结果。
这不是最优雅的解决方案,但通过将 "curr_line" 移动到全局范围内,我们可以在 "on key" 个事件之间保持它的持久性。
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);
});
我在搜索类似解决方案时遇到了您的问题,感谢您提交! :)
我正在开发一个小型 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 搜索没有结果。
这不是最优雅的解决方案,但通过将 "curr_line" 移动到全局范围内,我们可以在 "on key" 个事件之间保持它的持久性。
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);
});
我在搜索类似解决方案时遇到了您的问题,感谢您提交! :)