Skip to content
Permalink
Browse files

readline: allow history to be disabled

1.  The `historySize` to default to `30` only if `undefined`.
2.  If `historySize` is set to 0, then disable caching the line.
3.  Added unit tests.
4.  Updated documentation.

Fixes: #6336
PR-URL: #6352
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information...
suryagh authored and addaleax committed Apr 22, 2016
1 parent 4f619bd commit 0303a2552e21bac4a8952ba5e1f17a2692f2f544
Showing with 28 additions and 2 deletions.
  1. +2 −1 doc/api/readline.md
  2. +7 −1 lib/readline.js
  3. +19 −0 test/parallel/test-readline-interface.js
@@ -300,7 +300,8 @@ the following values:
treated like a TTY, and have ANSI/VT100 escape codes written to it.
Defaults to checking `isTTY` on the `output` stream upon instantiation.

- `historySize` - maximum number of history lines retained. Defaults to `30`.
- `historySize` - maximum number of history lines retained. To disable the
history set this value to `0`. Defaults to `30`.

The `completer` function is given the current line entered by the user, and
is supposed to return an Array with 2 entries:
@@ -53,12 +53,15 @@ function Interface(input, output, completer, terminal) {
historySize = input.historySize;
input = input.input;
}
historySize = historySize || kHistorySize;

if (completer && typeof completer !== 'function') {
throw new TypeError('Argument "completer" must be a function');
}

if (historySize === undefined) {
historySize = kHistorySize;
}

if (typeof historySize !== 'number' ||
isNaN(historySize) ||
historySize < 0) {
@@ -228,6 +231,9 @@ Interface.prototype._writeToOutput = function _writeToOutput(stringToWrite) {
Interface.prototype._addHistory = function() {
if (this.line.length === 0) return '';

// if the history is disabled then return the line
if (this.historySize === 0) return this.line;

if (this.history.length === 0 || this.history[0] !== this.line) {
this.history.unshift(this.line);

@@ -27,6 +27,25 @@ function isWarned(emitter) {
var rli;
var called;

// disable history
fi = new FakeInput();
rli = new readline.Interface({ input: fi, output: fi, terminal: terminal,
historySize: 0 });
assert.strictEqual(rli.historySize, 0);

fi.emit('data', 'asdf\n');
assert.deepStrictEqual(rli.history, terminal ? [] : undefined);
rli.close();

// default history size 30
fi = new FakeInput();
rli = new readline.Interface({ input: fi, output: fi, terminal: terminal});
assert.strictEqual(rli.historySize, 30);

fi.emit('data', 'asdf\n');
assert.deepStrictEqual(rli.history, terminal ? ['asdf'] : undefined);
rli.close();

// sending a full line
fi = new FakeInput();
rli = new readline.Interface({ input: fi, output: fi, terminal: terminal });

0 comments on commit 0303a25

Please sign in to comment.
You can’t perform that action at this time.