From: Nathan Rajlich Date: Wed, 28 Mar 2012 01:00:59 +0000 (-0700) Subject: repl: add a 'useColors' option to the repl X-Git-Tag: v0.7.7~24 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=208b2307440f95946b232c6a23e2547b7dd94e89;p=platform%2Fupstream%2Fnodejs.git repl: add a 'useColors' option to the repl This should only be minimally used, since the `terminal` value will usually be what you are expecting. This option is specifically for the case where `terminal` is false, but you still want colors to be output (or vice-versa). --- diff --git a/doc/api/repl.markdown b/doc/api/repl.markdown index 8ce2cea..2104136 100644 --- a/doc/api/repl.markdown +++ b/doc/api/repl.markdown @@ -47,6 +47,10 @@ takes the following values: - `eval` - function that will be used to eval each given line. Defaults to an async wrapper for `eval()`. See below for an example of a custom `eval`. + - `useColors` - a boolean which specifies whether or not the `writer` function + should output colors. If a different `writer` function is set then this does + nothing. Defaults to the repl's `terminal` value. + - `useGlobal` - if set to `true`, then the repl will use the `global` object, instead of running scripts in a separate context. Defaults to `false`. diff --git a/lib/_debugger.js b/lib/_debugger.js index 64ea20d..f1da313 100644 --- a/lib/_debugger.js +++ b/lib/_debugger.js @@ -690,14 +690,14 @@ var helpMessage = 'Commands: ' + commands.map(function(group) { }).join(',\n'); -function SourceUnderline(sourceText, position, tty) { +function SourceUnderline(sourceText, position, repl) { if (!sourceText) return ''; var head = sourceText.slice(0, position), tail = sourceText.slice(position); // Colourize char if stdout supports colours - if (tty && !repl.disableColors) { + if (repl.useColors) { tail = tail.replace(/(.+?)([^\w]|$)/, '\033[32m$1\033[39m$2'); } @@ -758,6 +758,9 @@ function Interface(stdin, stdout, args) { if (parseInt(process.env['NODE_NO_READLINE'], 10)) { opts.terminal = false; } + if (parseInt(process.env['NODE_DISABLE_COLORS'], 10)) { + opts.useColors = false; + } this.repl = repl.start(opts); // Do not print useless warning @@ -1134,7 +1137,7 @@ Interface.prototype.list = function(delta) { if (current) { line = SourceUnderline(lines[i], client.currentSourceColumn, - self.stdout.isTTY); + self.repl); } else { line = lines[i]; } diff --git a/lib/repl.js b/lib/repl.js index 711454c..505648b 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -58,8 +58,6 @@ function hasOwnProperty(obj, prop) { var context; -exports.disableColors = process.env.NODE_DISABLE_COLORS ? true : false; - // hack for require.resolve("./relative") to work properly. module.filename = path.resolve('repl'); @@ -163,8 +161,12 @@ function REPLServer(prompt, stream, eval, useGlobal, ignoreUndefined) { // figure out which "writer" function to use self.writer = options.writer || exports.writer; - if (rli.terminal && !exports.disableColors && - self.writer === util.inspect) { + if (typeof options.useColors === 'undefined') { + options.useColors = rli.terminal; + } + self.useColors = !!options.useColors; + + if (self.useColors && self.writer === util.inspect) { // Turn on ANSI coloring. self.writer = function(obj, showHidden, depth) { return util.inspect(obj, showHidden, depth, true); diff --git a/src/node.js b/src/node.js index 3229416..ade49aa 100644 --- a/src/node.js +++ b/src/node.js @@ -107,6 +107,9 @@ if (parseInt(process.env['NODE_NO_READLINE'], 10)) { opts.terminal = false; } + if (parseInt(process.env['NODE_DISABLE_COLORS'], 10)) { + opts.useColors = false; + } var repl = Module.requireRepl().start(opts); repl.on('exit', function() { process.exit(); diff --git a/test/simple/test-repl-options.js b/test/simple/test-repl-options.js index 17d7646..c3a83ae 100644 --- a/test/simple/test-repl-options.js +++ b/test/simple/test-repl-options.js @@ -40,6 +40,7 @@ assert.equal(r1.rli.output, stream); assert.equal(r1.rli.input, r1.inputStream); assert.equal(r1.rli.output, r1.outputStream); assert.equal(r1.rli.terminal, true); +assert.equal(r1.useColors, r1.rli.terminal); assert.equal(r1.useGlobal, false); assert.equal(r1.ignoreUndefined, false); @@ -50,6 +51,7 @@ var r2 = repl.start({ input: stream, output: stream, terminal: false, + useColors: true, useGlobal: true, ignoreUndefined: true, eval: evaler, @@ -60,6 +62,7 @@ assert.equal(r2.rli.output, stream); assert.equal(r2.rli.input, r2.inputStream); assert.equal(r2.rli.output, r2.outputStream); assert.equal(r2.rli.terminal, false); +assert.equal(r2.useColors, true); assert.equal(r2.useGlobal, true); assert.equal(r2.ignoreUndefined, true); assert.equal(r2.eval, evaler);