Skip to content

Commit

Permalink
doc: repl: add defineComand and displayPrompt
Browse files Browse the repository at this point in the history
Also some minor edits so the additions make sense.

PR-URL: #3765
Reviewed-By: James M Snell <[email protected]>
Reviewed-By: Rich Trott <[email protected]>
  • Loading branch information
bengl authored and Fishrock123 committed Nov 17, 2015
1 parent 84bb745 commit ae2d1ee
Showing 1 changed file with 55 additions and 7 deletions.
62 changes: 55 additions & 7 deletions doc/api/repl.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -138,10 +138,6 @@ and try to print `obj` in REPL, it will invoke the custom `inspect()` function:
> obj
{ bar: 'baz' }

[Readline Interface]: readline.html#readline_class_interface
[util.inspect()]: util.html#util_util_inspect_object_options
[here]: util.html#util_custom_inspect_function_on_objects

## repl.start(options)

Returns and starts a `REPLServer` instance, that inherits from
Expand Down Expand Up @@ -244,6 +240,10 @@ a `net.Server` and `net.Socket` instance, see: https://gist.github.com/2209310
For an example of running a REPL instance over `curl(1)`,
see: https://gist.github.com/2053342

## Class: REPLServer

This inherits from [Readline Interface][] with the following events:

### Event: 'exit'

`function () {}`
Expand All @@ -254,7 +254,7 @@ to signal "end" on the `input` stream.

Example of listening for `exit`:

r.on('exit', function () {
replServer.on('exit', function () {
console.log('Got "exit" event from repl!');
process.exit();
});
Expand All @@ -271,11 +271,59 @@ be emitted.
Example of listening for `reset`:

// Extend the initial repl context.
var r = repl.start({ options ... });
var replServer = repl.start({ options ... });
someExtension.extend(r.context);

// When a new context is created extend it as well.
r.on('reset', function (context) {
replServer.on('reset', function (context) {
console.log('repl has a new context');
someExtension.extend(context);
});

### replServer.defineCommand(keyword, cmd)

* `keyword` {String}
* `cmd` {Object|Function}

Makes a command available in the REPL. The command is invoked by typing a `.`
followed by the keyword. The `cmd` is an object with the following values:

- `help` - help text to be displayed when `.help` is entered (Optional).
- `action` - a function to execute, potentially taking in a string argument,
when the command is invoked, bound to the REPLServer instance (Required).

If a function is provided instead of an object for `cmd`, it is treated as the
`action`.

Example of defining a command:

// repl_test.js
var repl = require('repl');

var replServer = repl.start();
replServer.defineCommand('sayhello', {
help: 'Say hello',
action: function(name) {
this.write('Hello, ' + name + '!\n');
this.displayPrompt();
}
});

Example of invoking that command from the REPL:

> .sayhello Node.js User
Hello, Node.js User!

### replServer.displayPrompt([preserveCursor])

* `preserveCursor` {Boolean}

Like [readline.prompt][] except also adding indents with ellipses when inside
blocks. The `preserveCursor` argument is passed to [readline.prompt][]. This is
used primarily with `defineCommand`. It's also used internally to render each
prompt line.

[Readline Interface]: readline.html#readline_class_interface
[readline.prompt]: readline.html#readline_rl_prompt_preservecursor
[util.inspect()]: util.html#util_util_inspect_object_options
[here]: util.html#util_custom_inspect_function_on_objects

0 comments on commit ae2d1ee

Please sign in to comment.