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
|
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`
|
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.
|
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`
|
The `readline.createInterface()` method creates a new `readline.Interface`
|
||||||
instance.
|
instance.
|
||||||
@ -467,9 +468,12 @@ implement a small command-line interface:
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
const readline = require('readline');
|
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.prompt();
|
||||||
|
|
||||||
rl.on('line', (line) => {
|
rl.on('line', (line) => {
|
||||||
|
@ -44,6 +44,7 @@ function Interface(input, output, completer, terminal) {
|
|||||||
|
|
||||||
EventEmitter.call(this);
|
EventEmitter.call(this);
|
||||||
var historySize;
|
var historySize;
|
||||||
|
let prompt = '> ';
|
||||||
|
|
||||||
if (arguments.length === 1) {
|
if (arguments.length === 1) {
|
||||||
// an options object was given
|
// an options object was given
|
||||||
@ -51,6 +52,9 @@ function Interface(input, output, completer, terminal) {
|
|||||||
completer = input.completer;
|
completer = input.completer;
|
||||||
terminal = input.terminal;
|
terminal = input.terminal;
|
||||||
historySize = input.historySize;
|
historySize = input.historySize;
|
||||||
|
if (input.prompt !== undefined) {
|
||||||
|
prompt = input.prompt;
|
||||||
|
}
|
||||||
input = input.input;
|
input = input.input;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,7 +91,7 @@ function Interface(input, output, completer, terminal) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setPrompt('> ');
|
this.setPrompt(prompt);
|
||||||
|
|
||||||
this.terminal = !!terminal;
|
this.terminal = !!terminal;
|
||||||
|
|
||||||
|
@ -385,11 +385,10 @@ function REPLServer(prompt,
|
|||||||
output: self.outputStream,
|
output: self.outputStream,
|
||||||
completer: complete,
|
completer: complete,
|
||||||
terminal: options.terminal,
|
terminal: options.terminal,
|
||||||
historySize: options.historySize
|
historySize: options.historySize,
|
||||||
|
prompt
|
||||||
});
|
});
|
||||||
|
|
||||||
self.setPrompt(prompt !== undefined ? prompt : '> ');
|
|
||||||
|
|
||||||
this.commands = Object.create(null);
|
this.commands = Object.create(null);
|
||||||
defineDefaultCommands(this);
|
defineDefaultCommands(this);
|
||||||
|
|
||||||
@ -408,8 +407,6 @@ function REPLServer(prompt,
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
self.setPrompt(self._prompt);
|
|
||||||
|
|
||||||
self.on('close', function() {
|
self.on('close', function() {
|
||||||
self.emit('exit');
|
self.emit('exit');
|
||||||
});
|
});
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
// Flags: --expose_internals
|
// Flags: --expose_internals
|
||||||
'use strict';
|
'use strict';
|
||||||
require('../common');
|
const common = require('../common');
|
||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
const readline = require('readline');
|
const readline = require('readline');
|
||||||
const internalReadline = require('internal/readline');
|
const internalReadline = require('internal/readline');
|
||||||
const EventEmitter = require('events').EventEmitter;
|
const EventEmitter = require('events').EventEmitter;
|
||||||
const inherits = require('util').inherits;
|
const inherits = require('util').inherits;
|
||||||
|
const Writable = require('stream').Writable;
|
||||||
|
const Readable = require('stream').Readable;
|
||||||
|
|
||||||
function FakeInput() {
|
function FakeInput() {
|
||||||
EventEmitter.call(this);
|
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