繁体   English   中英

nodejs-类似于Bash的stdin

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM