From: Eric Schrock Date: Mon, 20 May 2013 18:44:26 +0000 (-0400) Subject: readline: handle input starting with control chars X-Git-Tag: v0.10.19~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=35ae69682253ea51e59610a9a9e132c78f5e71d5;p=platform%2Fupstream%2Fnodejs.git 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. --- diff --git a/lib/readline.js b/lib/readline.js index 75e51f8..c52f3e8 100644 --- a/lib/readline.js +++ b/lib/readline.js @@ -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; diff --git a/test/simple/test-readline-interface.js b/test/simple/test-readline-interface.js index fc20d1d..8976b8e 100644 --- a/test/simple/test-readline-interface.js +++ b/test/simple/test-readline-interface.js @@ -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');