diff --git a/doc/api/readline.md b/doc/api/readline.md index db543d2306..f939368122 100644 --- a/doc/api/readline.md +++ b/doc/api/readline.md @@ -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: diff --git a/lib/readline.js b/lib/readline.js index 3948d99053..680ffbf2cd 100644 --- a/lib/readline.js +++ b/lib/readline.js @@ -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); diff --git a/test/parallel/test-readline-interface.js b/test/parallel/test-readline-interface.js index 02f6dc980a..ab0c6d8824 100644 --- a/test/parallel/test-readline-interface.js +++ b/test/parallel/test-readline-interface.js @@ -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 });