[英]nodejs - Bash-like stdin
我想模拟bash输入行为(例如,按向上箭头访问输入历史记录,按Ctrl + C取消输入,按Ctrl + D退出)。
但是,例如,如果要转义箭头键(默认情况下,将其替换为^ [[A,^ [[B,^ [[C和^ [[D]),则需要设置原始模式 ,然后,每次按下一个键都会触发输入事件。 这很有用,但随后我需要对基本输入行为(如回车键或删除键)进行硬编码。
那么有没有办法(可能通过在stdin上管道传输流)以原始模式和非原始模式访问输入?
解决方案是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
您可能正在寻找的是本机TTY
模块的rs.setRawMode(mode)
。 最初在Node v0.8.x中,有一个未记录的process.stdin
keypress
事件,当它是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();
它也进行了更改以支持mousepress
事件,您也可以在GitHub页面上找到该事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.