nodejs – 类似于标准input的标准input

我想模拟bashinput行为(例如按向上箭头访问input历史logging,按Ctrl + C取消input,按Ctrl + D退出)。

但是,如果我想转义箭头键例如(默认情况下被^ [[A,^ [[B,^ [[C和^ [[D]replace,我需要设置原始模式 ,然后,每次按下按键时都会触发input事件。 这是有用的,但后来我需要硬编码的基本input行为,如返回键或删除键…

那么,有没有办法,也许通过pipe道inputstdin,访问input在原始模式和非原始模式?

解决scheme是readline模块( doc )。 它提供了一个input历史logging,一个自动完成(在选项卡命中)等。

例如:

 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); }); } 

文档中给出了一个命令行界面的例子

你可能要找的是本地TTY模块的rs.setRawMode(mode) 。 最初在Node v0.8.x中, process.stdin有一个未logging的keypress事件,当它是TTY时会发出。 它被改为只有在与readline使用时才会被触发,所以我会build议使用它。

该function仍然可以通过名为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页面上find它。