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 badges2 Answers
Reset to default 2As 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条)