Search code examples
node.jskeypressreadlineeofcommand-line-interface

Node.js multiline input


I'd like to prompt the user for input, let the user enter multiple lines of text, hitting enter between each line, then terminate the input by pressing CTRL+D or some such thing.

With "keypress", I can catch the EOF, but I would have to handle all the echoing, backspace handling, terminal escape sequences, etc. manually. It would be much better if I could use "readline", but somehow intercept the CTRL+D (EOF) with "keypress", but I'm not sure how I would go about that.


Solution

  • You can use the line and close events:

    var readline = require('readline');
    
    var input = [];
    
    var rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    });
    
    rl.prompt();
    
    rl.on('line', function (cmd) {
    
        input.push(cmd);
    });
    
    rl.on('close', function (cmd) {
    
        console.log(input.join('\n'));
        process.exit(0);
    });