summaryrefslogtreecommitdiff
path: root/lib/readline.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/readline.js')
-rw-r--r--lib/readline.js16
1 files changed, 5 insertions, 11 deletions
diff --git a/lib/readline.js b/lib/readline.js
index b25cf9ee64..630359aeb6 100644
--- a/lib/readline.js
+++ b/lib/readline.js
@@ -64,8 +64,7 @@ const {
kClearScreenDown
} = CSI;
-// Lazy load StringDecoder for startup performance.
-let StringDecoder;
+const { StringDecoder } = require('string_decoder');
// Lazy load Readable for startup performance.
let Readable;
@@ -93,9 +92,6 @@ function Interface(input, output, completer, terminal) {
return new Interface(input, output, completer, terminal);
}
- if (StringDecoder === undefined)
- StringDecoder = require('string_decoder').StringDecoder;
-
this._sawReturnAt = 0;
this.isCompletionEnabled = true;
this._sawKeyPress = false;
@@ -1131,8 +1127,6 @@ Interface.prototype[Symbol.asyncIterator] = function() {
function emitKeypressEvents(stream, iface) {
if (stream[KEYPRESS_DECODER]) return;
- if (StringDecoder === undefined)
- StringDecoder = require('string_decoder').StringDecoder;
stream[KEYPRESS_DECODER] = new StringDecoder('utf8');
stream[ESCAPE_DECODER] = emitKeys(stream);
@@ -1147,8 +1141,11 @@ function emitKeypressEvents(stream, iface) {
if (r) {
clearTimeout(timeoutId);
+ let escapeTimeout = ESCAPE_CODE_TIMEOUT;
+
if (iface) {
iface._sawKeyPress = r.length === 1;
+ escapeTimeout = iface.escapeCodeTimeout;
}
for (let i = 0; i < r.length; i++) {
@@ -1160,10 +1157,7 @@ function emitKeypressEvents(stream, iface) {
stream[ESCAPE_DECODER].next(r[i]);
// Escape letter at the tail position
if (r[i] === kEscape && i + 1 === r.length) {
- timeoutId = setTimeout(
- escapeCodeTimeout,
- iface ? iface.escapeCodeTimeout : ESCAPE_CODE_TIMEOUT
- );
+ timeoutId = setTimeout(escapeCodeTimeout, escapeTimeout);
}
} catch (err) {
// If the generator throws (it could happen in the `keypress`