Skip to content

Commit

Permalink
readline: fix tab completion bug
Browse files Browse the repository at this point in the history
This fixes a problem where tab completion is empty when the input
stream column size is undefined. As a solution we can force maxColumns
to 1 in this scenario.

PR-URL: #2816
Fixes: #2396
Reviewed-By: Roman Reiss <me@silverwind.io>
  • Loading branch information
mtharrison authored and Fishrock123 committed Sep 20, 2015
1 parent d63e02e commit d4cd5ac
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 1 deletion.
5 changes: 4 additions & 1 deletion lib/readline.js
Original file line number Diff line number Diff line change
Expand Up @@ -390,7 +390,10 @@ Interface.prototype._tabComplete = function() {
var width = completions.reduce(function(a, b) {
return a.length > b.length ? a : b;
}).length + 2; // 2 space padding
var maxColumns = Math.floor(self.columns / width) || 1;
var maxColumns = Math.floor(self.columns / width);
if (!maxColumns || maxColumns === Infinity) {
maxColumns = 1;
}
var group = [], c;
for (var i = 0, compLen = completions.length; i < compLen; i++) {
c = completions[i];
Expand Down
36 changes: 36 additions & 0 deletions test/parallel/test-readline-undefined-columns.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
'use strict';

const assert = require('assert');
const PassThrough = require('stream').PassThrough;
const readline = require('readline');

// Checks that tab completion still works
// when output column size is undefined

const iStream = new PassThrough();
const oStream = new PassThrough();

const rli = readline.createInterface({
terminal: true,
input: iStream,
output: oStream,
completer: function(line, cb) {
cb(null, [['process.stdout', 'process.stdin', 'process.stderr'], line]);
}
});

var output = '';

oStream.on('data', function(data) {
output += data;
});

oStream.on('end', function() {
const expect = 'process.stdout\r\n' +
'process.stdin\r\n' +
'process.stderr';
assert(new RegExp(expect).test(output));
});

iStream.write('process.std\t');
oStream.end();

0 comments on commit d4cd5ac

Please sign in to comment.