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它。
- 节点HTTP服务器不工作在Ubuntu Linux上
- Nodejs从数据库中检索信息并传递给JavaScript
- 如何使用node.js代码在Firestore中创build一个集合
- NodeJS – 处理超过100个并发连接的内存
- “node-debug index.js”和“run node-inspector,then node –debug index.js”有什么区别?
- node.js – 访问系统命令的退出代码和stderr
- 无法从Firebase数据库Node.js / JavaScript获取数据
- 具有sails-permissions的标准许可
- NodeJS将video插入Youtube播放列表