repl: don't use tty control codes when $TERM is set to "dumb"
This change stops the REPL from using ANSI control codes for colours when the TERM environment variable is set to "dumb". "dumb" is the terminal type with the smallest set of capabilities as described by terminfo. See: http://invisible-island.net/ncurses/terminfo.ti.html#toc-_Specials Related: https://github.com/nodejs/node-v0.x-archive/issues/5344 Related: https://github.com/nodejs/node-v0.x-archive/pull/25506 Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: Roman Reiss <me@silverwind.io> PR-URL: https://github.com/nodejs/node/pull/2712
This commit is contained in:
parent
79d2c4e1bf
commit
ccea33df62
@ -34,7 +34,10 @@ function createRepl(env, opts, cb) {
|
|||||||
if (parseInt(env.NODE_NO_READLINE)) {
|
if (parseInt(env.NODE_NO_READLINE)) {
|
||||||
opts.terminal = false;
|
opts.terminal = false;
|
||||||
}
|
}
|
||||||
if (parseInt(env.NODE_DISABLE_COLORS)) {
|
// the "dumb" special terminal, as defined by terminfo, doesn't support
|
||||||
|
// ANSI colour control codes.
|
||||||
|
// see http://invisible-island.net/ncurses/terminfo.ti.html#toc-_Specials
|
||||||
|
if (parseInt(env.NODE_DISABLE_COLORS) || env.TERM === 'dumb') {
|
||||||
opts.useColors = false;
|
opts.useColors = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
55
test/parallel/test-repl-envvars.js
Normal file
55
test/parallel/test-repl-envvars.js
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Flags: --expose-internals
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const stream = require('stream');
|
||||||
|
const REPL = require('internal/repl');
|
||||||
|
const assert = require('assert');
|
||||||
|
const inspect = require('util').inspect;
|
||||||
|
|
||||||
|
const tests = [{
|
||||||
|
env: {},
|
||||||
|
expected: { terminal: true, useColors: true }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
env: { NODE_DISABLE_COLORS: '1' },
|
||||||
|
expected: { terminal: true, useColors: false }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
env: { NODE_NO_READLINE: '1' },
|
||||||
|
expected: { terminal: false, useColors: false }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
env: { TERM: 'dumb' },
|
||||||
|
expected: { terminal: true, useColors: false }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
env: { NODE_NO_READLINE: '1', NODE_DISABLE_COLORS: '1' },
|
||||||
|
expected: { terminal: false, useColors: false }
|
||||||
|
},
|
||||||
|
{
|
||||||
|
env: { NODE_NO_READLINE: '0' },
|
||||||
|
expected: { terminal: true, useColors: true }
|
||||||
|
}];
|
||||||
|
|
||||||
|
function run(test) {
|
||||||
|
const env = test.env;
|
||||||
|
const expected = test.expected;
|
||||||
|
const opts = {
|
||||||
|
terminal: true,
|
||||||
|
input: new stream.Readable({ read() {} }),
|
||||||
|
output: new stream.Writable({ write() {} })
|
||||||
|
};
|
||||||
|
|
||||||
|
REPL.createInternalRepl(env, opts, function(err, repl) {
|
||||||
|
if (err) throw err;
|
||||||
|
assert.equal(expected.terminal, repl.terminal,
|
||||||
|
'Expected ' + inspect(expected) + ' with ' + inspect(env));
|
||||||
|
assert.equal(expected.useColors, repl.useColors,
|
||||||
|
'Expected ' + inspect(expected) + ' with ' + inspect(env));
|
||||||
|
repl.close();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
tests.forEach(run);
|
Loading…
x
Reference in New Issue
Block a user