readline: support TERM=dumb · nodejs/node@d3a62fe (original) (raw)

`@@ -34,7 +34,6 @@ const {

`

34

34

`const { validateString } = require('internal/validators');

`

35

35

`const { inspect } = require('util');

`

36

36

`const { emitExperimentalWarning } = require('internal/util');

`

37

``

`-

const { Buffer } = require('buffer');

`

38

37

`const EventEmitter = require('events');

`

39

38

`const {

`

40

39

`CSI,

`

`@@ -161,6 +160,10 @@ function Interface(input, output, completer, terminal) {

`

161

160

``

162

161

`this.terminal = !!terminal;

`

163

162

``

``

163

`+

if (process.env.TERM === 'dumb') {

`

``

164

`+

this._ttyWrite = _ttyWriteDumb.bind(this);

`

``

165

`+

}

`

``

166

+

164

167

`function ondata(data) {

`

165

168

`self._normalWrite(data);

`

166

169

`}

`

`@@ -276,7 +279,7 @@ Interface.prototype._setRawMode = function(mode) {

`

276

279

``

277

280

`Interface.prototype.prompt = function(preserveCursor) {

`

278

281

`if (this.paused) this.resume();

`

279

``

`-

if (this.terminal) {

`

``

282

`+

if (this.terminal && process.env.TERM !== 'dumb') {

`

280

283

`if (!preserveCursor) this.cursor = 0;

`

281

284

`this._refreshLine();

`

282

285

`} else {

`

`@@ -417,7 +420,11 @@ Interface.prototype.resume = function() {

`

417

420

``

418

421

`Interface.prototype.write = function(d, key) {

`

419

422

`if (this.paused) this.resume();

`

420

``

`-

this.terminal ? this._ttyWrite(d, key) : this._normalWrite(d);

`

``

423

`+

if (this.terminal) {

`

``

424

`+

this._ttyWrite(d, key);

`

``

425

`+

} else {

`

``

426

`+

this._normalWrite(d);

`

``

427

`+

}

`

421

428

`};

`

422

429

``

423

430

`Interface.prototype._normalWrite = function(b) {

`

`@@ -789,6 +796,46 @@ Interface.prototype._moveCursor = function(dx) {

`

789

796

`}

`

790

797

`};

`

791

798

``

``

799

`+

function _ttyWriteDumb(s, key) {

`

``

800

`+

key = key || {};

`

``

801

+

``

802

`+

if (key.name === 'escape') return;

`

``

803

+

``

804

`+

if (this._sawReturnAt && key.name !== 'enter')

`

``

805

`+

this._sawReturnAt = 0;

`

``

806

+

``

807

`+

if (key.ctrl && key.name === 'c') {

`

``

808

`+

if (this.listenerCount('SIGINT') > 0) {

`

``

809

`+

this.emit('SIGINT');

`

``

810

`+

} else {

`

``

811

`+

// This readline instance is finished

`

``

812

`+

this.close();

`

``

813

`+

}

`

``

814

`+

}

`

``

815

+

``

816

`+

switch (key.name) {

`

``

817

`+

case 'return': // carriage return, i.e. \r

`

``

818

`+

this._sawReturnAt = Date.now();

`

``

819

`+

this._line();

`

``

820

`+

break;

`

``

821

+

``

822

`+

case 'enter':

`

``

823

`+

// When key interval > crlfDelay

`

``

824

`+

if (this._sawReturnAt === 0 ||

`

``

825

`+

Date.now() - this._sawReturnAt > this.crlfDelay) {

`

``

826

`+

this._line();

`

``

827

`+

}

`

``

828

`+

this._sawReturnAt = 0;

`

``

829

`+

break;

`

``

830

+

``

831

`+

default:

`

``

832

`+

if (typeof s === 'string' && s) {

`

``

833

`+

this.line += s;

`

``

834

`+

this.cursor += s.length;

`

``

835

`+

this._writeToOutput(s);

`

``

836

`+

}

`

``

837

`+

}

`

``

838

`+

}

`

792

839

``

793

840

`// handle a write from the tty

`

794

841

`Interface.prototype._ttyWrite = function(s, key) {

`

`@@ -1007,10 +1054,7 @@ Interface.prototype._ttyWrite = function(s, key) {

`

1007

1054

`// falls through

`

1008

1055

``

1009

1056

`default:

`

1010

``

`-

if (s instanceof Buffer)

`

1011

``

`-

s = s.toString('utf-8');

`

1012

``

-

1013

``

`-

if (s) {

`

``

1057

`+

if (typeof s === 'string' && s) {

`

1014

1058

`var lines = s.split(/\r\n|\n|\r/);

`

1015

1059

`for (var i = 0, len = lines.length; i < len; i++) {

`

1016

1060

`if (i > 0) {

`