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: https://github.com/nodejs/node/pull/7125 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
This commit is contained in:
parent
1d75987ff0
commit
3f5623dd46
@ -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,6 +44,7 @@ function Interface(input, output, completer, terminal) {
|
||||
|
||||
EventEmitter.call(this);
|
||||
var historySize;
|
||||
let prompt = '> ';
|
||||
|
||||
if (arguments.length === 1) {
|
||||
// an options object was given
|
||||
@ -51,6 +52,9 @@ function Interface(input, output, completer, terminal) {
|
||||
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, '$ ');
|
||||
}
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user