Permalink
Browse files

readline: allow passing prompt to constructor

Previously, one would have to call setPrompt after calling
rl.createInterface. Now, the prompt string can be set by passing the
prompt property.

PR-URL: #7125
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
  • Loading branch information...
evanlucas committed Jun 3, 2016
1 parent 1d75987 commit 3f5623dd462398d7af0814eadf5f8f43a610330e
Showing with 41 additions and 9 deletions.
  1. +6 −2 doc/api/readline.md
  2. +5 −1 lib/readline.js
  3. +2 −5 lib/repl.js
  4. +28 −1 test/parallel/test-readline-interface.js
@@ -357,6 +357,7 @@ added: v0.1.98
the history set this value to `0`. Defaults to `30`. This option makes sense
only if `terminal` is set to `true` by the user or by an internal `output`
check, otherwise the history caching mechanism is not initialized at all.
* `prompt` - the prompt string to use. Default: `'> '`
The `readline.createInterface()` method creates a new `readline.Interface`
instance.
@@ -467,9 +468,12 @@ implement a small command-line interface:
```js
const readline = require('readline');
const rl = readline.createInterface(process.stdin, process.stdout);
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: 'OHAI> '
});
rl.setPrompt('OHAI> ');
rl.prompt();
rl.on('line', (line) => {
@@ -44,13 +44,17 @@ function Interface(input, output, completer, terminal) {
EventEmitter.call(this);
var historySize;
let prompt = '> ';
if (arguments.length === 1) {
// an options object was given
output = input.output;
completer = input.completer;
terminal = input.terminal;
historySize = input.historySize;
if (input.prompt !== undefined) {
prompt = input.prompt;
}
input = input.input;
}
@@ -87,7 +91,7 @@ function Interface(input, output, completer, terminal) {
};
}
this.setPrompt('> ');
this.setPrompt(prompt);
this.terminal = !!terminal;
@@ -385,11 +385,10 @@ function REPLServer(prompt,
output: self.outputStream,
completer: complete,
terminal: options.terminal,
historySize: options.historySize
historySize: options.historySize,
prompt
});
self.setPrompt(prompt !== undefined ? prompt : '> ');
this.commands = Object.create(null);
defineDefaultCommands(this);
@@ -408,8 +407,6 @@ function REPLServer(prompt,
};
}
self.setPrompt(self._prompt);
self.on('close', function() {
self.emit('exit');
});
@@ -1,11 +1,13 @@
// Flags: --expose_internals
'use strict';
require('../common');
const common = require('../common');
const assert = require('assert');
const readline = require('readline');
const internalReadline = require('internal/readline');
const EventEmitter = require('events').EventEmitter;
const inherits = require('util').inherits;
const Writable = require('stream').Writable;
const Readable = require('stream').Readable;
function FakeInput() {
EventEmitter.call(this);
@@ -396,4 +398,29 @@ function isWarned(emitter) {
});
});
{
const expected = terminal
? ['\u001b[1G', '\u001b[0J', '$ ', '\u001b[3G']
: ['$ '];
let counter = 0;
const output = new Writable({
write: common.mustCall((chunk, enc, cb) => {
assert.strictEqual(chunk.toString(), expected[counter++]);
cb();
rl.close();
}, expected.length)
});
const rl = readline.createInterface({
input: new Readable({ read: () => {} }),
output: output,
prompt: '$ ',
terminal: terminal
});
rl.prompt();
assert.strictEqual(rl._prompt, '$ ');
}
});

0 comments on commit 3f5623d

Please sign in to comment.