我想模仿bash输入行为(例如,按向上箭头访问输入历史记录,按Ctrl + C取消输入,按Ctrl + D退出)。
但是如果我想要转义箭头键(例如默认情况下被替换为^ [[A,^ [[B,^ [[C和^ [[D],我需要设置 raw模式打开,然后,每次按下键时都会触发输入事件。这很有用,但后来我需要对返回键或删除键等基本输入行为进行硬编码......
那么有没有办法,可能通过在stdin上管道流,以原始模式和非原始模式访问输入?
答案 0 :(得分:3)
解决方案是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);
});
}
在doc
中给出了命令行界面的示例here答案 1 :(得分:0)
您可能正在寻找的是本地TTY
模块的rs.setRawMode(mode)
。最初在Node v0.8.x中,keypress
有一个未记录的process.stdin
事件,当它是TTY时会发出。然后将其更改为仅在与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();
它也被修改为支持您在GitHub页面上也可以找到的mousepress
事件。