我想模拟 bash 输入行为(例如,按向上箭头访问输入历史,按 Ctrl+C 取消输入,按 Ctrl+D 退出)。
但是,如果我想转义例如箭头键(默认情况下替换为 ^[[A、^[[B、^[[C 和 ^[[D),我需要设置原始模式,然后,每次按下键时都会触发输入事件。这很有用,但是我需要硬编码基本的输入行为,如返回键或删除键......
那么有没有办法,也许通过在标准输入上管道流,以原始模式和非原始模式访问输入?
解决方案是readline
模块(doc)。它提供输入历史、自动完成(在标签点击时)等。
例子 :
var readline = require('readline');
var rl = readline.createInterface({
input : process.stdin,
output : process.stdout,
});
function input (prompt, callback) {
rl.question(prompt, function (res) {
if (res === 'quit') rl.close();
else callback(res);
});
}
文档中给出了命令行界面的示例
您可能正在寻找的是rs.setRawMode(mode)
原生TTY
模块。最初在 Node v0.8.x 中,当它是 TTY 时会发出一个未记录的keypress
事件。process.stdin
然后将其更改为仅在与 一起使用时触发readline
,因此我建议使用它。
该功能仍然可以通过一个名为keypress
. 它直接取自 Node 源代码,并像这样使用(取自文档):
var keypress = require('keypress');
// make `process.stdin` begin emitting "keypress" events
keypress(process.stdin);
// listen for the "keypress" event
process.stdin.on('keypress', function (ch, key) {
console.log('got "keypress"', key);
if (key && key.ctrl && key.name == 'c') {
process.stdin.pause();
}
});
process.stdin.setRawMode(true);
process.stdin.resume();
它也进行了更改,以支持mousepress
您也可以在 GitHub 页面上找到的事件。