readline: handle input starting with control chars
Handle control characters only when there is a single byte in the stream, otherwise fall through to the standard multibyte handling.
This commit is contained in:
Родитель
7c554a5cd0
Коммит
35ae696822
|
@ -941,7 +941,7 @@ function emitKey(stream, s) {
|
|||
key.name = 'space';
|
||||
key.meta = (s.length === 2);
|
||||
|
||||
} else if (s <= '\x1a') {
|
||||
} else if (s.length === 1 && s <= '\x1a') {
|
||||
// ctrl+letter
|
||||
key.name = String.fromCharCode(s.charCodeAt(0) + 'a'.charCodeAt(0) - 1);
|
||||
key.ctrl = true;
|
||||
|
|
|
@ -155,6 +155,18 @@ FakeInput.prototype.end = function() {};
|
|||
assert.equal(callCount, expectedLines.length - 1);
|
||||
rli.close();
|
||||
|
||||
// \r at start of input should output blank line
|
||||
fi = new FakeInput();
|
||||
rli = new readline.Interface({ input: fi, output: fi, terminal: true });
|
||||
expectedLines = ['', 'foo' ];
|
||||
callCount = 0;
|
||||
rli.on('line', function(line) {
|
||||
assert.equal(line, expectedLines[callCount]);
|
||||
callCount++;
|
||||
});
|
||||
fi.emit('data', '\rfoo\r');
|
||||
assert.equal(callCount, expectedLines.length);
|
||||
rli.close();
|
||||
|
||||
// sending a multi-byte utf8 char over multiple writes
|
||||
var buf = Buffer('☮', 'utf8');
|
||||
|
|
Загрузка…
Ссылка в новой задаче