javascript - Detect enter in keypress event node.js rawmode - Stack Overflow

I am writing a simple mandline tool to allow mandline input to a node.js server.I am trying to make a

I am writing a simple mandline tool to allow mandline input to a node.js server. I am trying to make a buffer, so the user can press up and see the last mand. To do that I have set

require('tty').setRawMode(true);

And detects all keypress with:

process.stdin.on('keypress', function (letter, key) {
    if (key && key.ctrl && key.name == 'c') {
        process.exit();
    } else if (key && key.enter) {
        write(letter);
        msgFired(buffer[bufferPos]);

        bufferPos += 1;
        buffer[bufferPos] = "";
    } else {
        write(letter);
        buffer[bufferPos] += letter;
    }
});

This does not detect enter-presses.

Are there a way to detect when a whole line is fires (as when RawMode is false) alongside with the keypress event? If not, how I detect the enter-press?

I am writing a simple mandline tool to allow mandline input to a node.js server. I am trying to make a buffer, so the user can press up and see the last mand. To do that I have set

require('tty').setRawMode(true);

And detects all keypress with:

process.stdin.on('keypress', function (letter, key) {
    if (key && key.ctrl && key.name == 'c') {
        process.exit();
    } else if (key && key.enter) {
        write(letter);
        msgFired(buffer[bufferPos]);

        bufferPos += 1;
        buffer[bufferPos] = "";
    } else {
        write(letter);
        buffer[bufferPos] += letter;
    }
});

This does not detect enter-presses.

Are there a way to detect when a whole line is fires (as when RawMode is false) alongside with the keypress event? If not, how I detect the enter-press?

Share Improve this question asked Nov 22, 2011 at 20:08 JPugeJPuge 5961 gold badge5 silver badges14 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 2

As far as I can see, your only error is that this:

else if (key && key.enter) {

should be this:

else if (key && key.name == 'enter') {

I have found a solution myself. To check for enter, the appropriate test is:

if (key && key.name == 'enter')

Here is a solution that works fairly well:

var allowedKeys = "abcdefghijklmnopqrstuvwxyzæøåABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ1234567890!- ";
process.stdin.on('keypress', function (letter, key) {
    if (key && key.ctrl && key.name == 'c') {
        listen = false;
        log("");
        process.exit();
    } else if (key && key.name == 'enter') {
        write('\n');
        msgFired(buffer[bufferPos]);

        buffer[bufferPos] = "";
    } else if (allowedKeys.indexOf(letter) != -1) {
        write(letter);
        buffer[bufferPos] += letter;
    }
});

The keynames (key.name) are fairly easy to guess. Tab is 'tab', enter is 'enter', arrow up is 'up' etc.

I hope this was helpful to anyone...

Edit: Note that I added a list of allowed characters, so the code does not crash on strange characters like ctrl + 3.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744330131a4568845.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信