检测输入按键事件node.js rawmode

时间:2011-11-22 20:08:06

标签: javascript node.js

我正在编写一个简单的命令行工具,允许命令行输入到node.js服务器。 我正在尝试创建缓冲区,因此用户可以按下并查看最后一个命令。为此,我设置了

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

并检测所有按键:

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

这不会检测输入印刷机。

有没有办法检测整个行何时触发(与RawMode为假时)以及按键事件?如果没有,我如何检测输入印刷机?

2 个答案:

答案 0 :(得分:2)

据我所知,你唯一的错误是:

else if (key && key.enter) {

应该是这样的:

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

答案 1 :(得分:2)

我自己找到了解决方案。要检查输入,相应的测试是:

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

这是一个运作良好的解决方案:

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

键名(key.name)很容易猜到。标签是'tab',输入是'enter',向上箭头是'up'等。

我希望这对任何人都有帮助......

编辑:请注意,我添加了一个允许的字符列表,因此代码不会像ctrl + 3这样的奇怪字符崩溃。