我正在编写一个简单的命令行工具,允许命令行输入到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为假时)以及按键事件?如果没有,我如何检测输入印刷机?
答案 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这样的奇怪字符崩溃。