|
|
@ -31,12 +31,21 @@ const { debug, inherits } = require('util'); |
|
|
|
const Buffer = require('buffer').Buffer; |
|
|
|
const EventEmitter = require('events'); |
|
|
|
const { |
|
|
|
CSI, |
|
|
|
emitKeys, |
|
|
|
getStringWidth, |
|
|
|
isFullWidthCodePoint, |
|
|
|
stripVTControlCharacters |
|
|
|
} = require('internal/readline'); |
|
|
|
|
|
|
|
const { |
|
|
|
kEscape, |
|
|
|
kClearToBeginning, |
|
|
|
kClearToEnd, |
|
|
|
kClearLine, |
|
|
|
kClearScreenDown |
|
|
|
} = CSI; |
|
|
|
|
|
|
|
const kHistorySize = 30; |
|
|
|
const kMincrlfDelay = 100; |
|
|
|
const kMaxcrlfDelay = 2000; |
|
|
@ -995,7 +1004,7 @@ function emitKeypressEvents(stream, iface) { |
|
|
|
try { |
|
|
|
stream[ESCAPE_DECODER].next(r[i]); |
|
|
|
// Escape letter at the tail position
|
|
|
|
if (r[i] === '\x1b' && i + 1 === r.length) { |
|
|
|
if (r[i] === kEscape && i + 1 === r.length) { |
|
|
|
timeoutId = setTimeout(escapeCodeTimeout, ESCAPE_CODE_TIMEOUT); |
|
|
|
} |
|
|
|
} catch (err) { |
|
|
@ -1047,9 +1056,9 @@ function cursorTo(stream, x, y) { |
|
|
|
throw new Error('Can\'t set cursor row without also setting it\'s column'); |
|
|
|
|
|
|
|
if (typeof y !== 'number') { |
|
|
|
stream.write('\x1b[' + (x + 1) + 'G'); |
|
|
|
stream.write(CSI`${x + 1}G`); |
|
|
|
} else { |
|
|
|
stream.write('\x1b[' + (y + 1) + ';' + (x + 1) + 'H'); |
|
|
|
stream.write(CSI`${y + 1};${x + 1}H`); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -1062,15 +1071,15 @@ function moveCursor(stream, dx, dy) { |
|
|
|
return; |
|
|
|
|
|
|
|
if (dx < 0) { |
|
|
|
stream.write('\x1b[' + (-dx) + 'D'); |
|
|
|
stream.write(CSI`${-dx}D`); |
|
|
|
} else if (dx > 0) { |
|
|
|
stream.write('\x1b[' + dx + 'C'); |
|
|
|
stream.write(CSI`${dx}C`); |
|
|
|
} |
|
|
|
|
|
|
|
if (dy < 0) { |
|
|
|
stream.write('\x1b[' + (-dy) + 'A'); |
|
|
|
stream.write(CSI`${-dy}A`); |
|
|
|
} else if (dy > 0) { |
|
|
|
stream.write('\x1b[' + dy + 'B'); |
|
|
|
stream.write(CSI`${dy}B`); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -1087,13 +1096,13 @@ function clearLine(stream, dir) { |
|
|
|
|
|
|
|
if (dir < 0) { |
|
|
|
// to the beginning
|
|
|
|
stream.write('\x1b[1K'); |
|
|
|
stream.write(kClearToBeginning); |
|
|
|
} else if (dir > 0) { |
|
|
|
// to the end
|
|
|
|
stream.write('\x1b[0K'); |
|
|
|
stream.write(kClearToEnd); |
|
|
|
} else { |
|
|
|
// entire line
|
|
|
|
stream.write('\x1b[2K'); |
|
|
|
stream.write(kClearLine); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -1105,7 +1114,7 @@ function clearScreenDown(stream) { |
|
|
|
if (stream === null || stream === undefined) |
|
|
|
return; |
|
|
|
|
|
|
|
stream.write('\x1b[0J'); |
|
|
|
stream.write(kClearScreenDown); |
|
|
|
} |
|
|
|
|
|
|
|
module.exports = { |
|
|
|