summaryrefslogtreecommitdiff
path: root/lib/internal/readline.js
diff options
context:
space:
mode:
authorJames M Snell <jasnell@gmail.com>2017-04-29 17:05:04 -0700
committerAnna Henningsen <anna@addaleax.net>2017-05-07 22:54:26 +0200
commit4c070d489718b196d7950998ccfb54bcc50d9711 (patch)
tree4ae3ae06ef77340f821f180472d55e3bcad929be /lib/internal/readline.js
parent4ac7a68ccd6fb0104f171ef49e964fb6d4a170c6 (diff)
downloadandroid-node-v8-4c070d489718b196d7950998ccfb54bcc50d9711.tar.gz
android-node-v8-4c070d489718b196d7950998ccfb54bcc50d9711.tar.bz2
android-node-v8-4c070d489718b196d7950998ccfb54bcc50d9711.zip
readline: move escape codes into internal/readline
Moves escape codes into internal/readline for easier management. PR-URL: https://github.com/nodejs/node/pull/12755 Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'lib/internal/readline.js')
-rw-r--r--lib/internal/readline.js27
1 files changed, 23 insertions, 4 deletions
diff --git a/lib/internal/readline.js b/lib/internal/readline.js
index 4474b02345..96da5cc82f 100644
--- a/lib/internal/readline.js
+++ b/lib/internal/readline.js
@@ -7,9 +7,27 @@
const ansi =
/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
+const kEscape = '\x1b';
+
var getStringWidth;
var isFullWidthCodePoint;
+function CSI(strings, ...args) {
+ let ret = `${kEscape}[`;
+ for (var n = 0; n < strings.length; n++) {
+ ret += strings[n];
+ if (n < args.length)
+ ret += args[n];
+ }
+ return ret;
+}
+
+CSI.kEscape = kEscape;
+CSI.kClearToBeginning = CSI`1K`;
+CSI.kClearToEnd = CSI`0K`;
+CSI.kClearLine = CSI`2K`;
+CSI.kClearScreenDown = CSI`0J`;
+
if (process.binding('config').hasIntl) {
const icu = process.binding('icu');
getStringWidth = function getStringWidth(str, options) {
@@ -151,11 +169,11 @@ function* emitKeys(stream) {
shift: false
};
- if (ch === '\x1b') {
+ if (ch === kEscape) {
escaped = true;
s += (ch = yield);
- if (ch === '\x1b') {
+ if (ch === kEscape) {
s += (ch = yield);
}
}
@@ -370,7 +388,7 @@ function* emitKeys(stream) {
// backspace or ctrl+h
key.name = 'backspace';
key.meta = escaped;
- } else if (ch === '\x1b') {
+ } else if (ch === kEscape) {
// escape key
key.name = 'escape';
key.meta = escaped;
@@ -409,5 +427,6 @@ module.exports = {
emitKeys,
getStringWidth,
isFullWidthCodePoint,
- stripVTControlCharacters
+ stripVTControlCharacters,
+ CSI
};