Browse Source

Add NODE_NO_READLINE check for REPL

Setting this environmental variable to a non-zero integer will start all
REPL interfaces without readline. For use with rlwrap.
v0.7.4-release
Ryan Dahl 15 years ago
parent
commit
adc06dd705
  1. 42
      doc/api.markdown
  2. 19
      lib/readline.js
  3. 3
      lib/repl.js

42
doc/api.markdown

@ -2760,21 +2760,18 @@ The escape function used by `querystring.stringify`, provided so that it could b
The unescape function used by `querystring.parse`, provided so that it could be overridden if necessary.
## REPL
A Read-Eval-Print-Loop is available both as a standalone program and easily
A Read-Eval-Print-Loop (REPL) is available both as a standalone program and easily
includable in other programs. REPL provides a way to interactively run
JavaScript and see the results. It can be used for debugging, testing, or
just trying things out.
The standalone REPL is called `node-repl` and is installed at
`$PREFIX/bin/node-repl`.
By executing `node` without any arguments from the command-line you will be
dropped into the REPL. It has simplistic emacs line-editting.
mjr:~$ /usr/local/bin/node-repl
Welcome to the Node.js REPL.
Enter ECMAScript at the prompt.
Tip 1: Use 'rlwrap node-repl' for a better interface
Tip 2: Type Control-D to exit.
mjr:~$ node
Type '.help' for options.
node> a = [ 1, 2, 3];
[ 1, 2, 3 ]
@ -2785,6 +2782,13 @@ The standalone REPL is called `node-repl` and is installed at
2
3
For advanced line-editors, start node with the environmental variable `NODE_NO_READLINE=1`.
This will start the REPL in canonical terminal settings which will allow you to use with `rlwrap`.
For example, you could add this to your bashrc file:
alias node="env NODE_NO_READLINE=1 rlwrap node"
### repl.start(prompt, stream)
@ -2824,28 +2828,6 @@ By starting a REPL from a Unix socket-based server instead of stdin, you can
connect to a long-running node process without restarting it.
### readline support
Interactive command history for REPL is available from external programs like `rlwrap`
or `socat`. These programs are available from many Unix package managers.
To start the standalone REPL with `rlwrap`:
rlwrap node-repl
It might be convenient to use this alias in your shell configuration:
alias repl='rlwrap node-repl'
Using `socat` to connect to a Unix socket:
socat READLINE UNIX-CONNECT:/tmp/node-repl-sock
Using `socat` to connect to a TCP socket on localhost:
socat READLINE TCP-CONNECT:localhost:5001
### REPL Features
Inside the REPL, Control+D will exit. Multi-line expressions can be input.

19
lib/readline.js

@ -9,29 +9,34 @@ var kBufSize = 10*1024;
var Buffer = require('buffer').Buffer;
var sys = require('sys');
var inherits = require('sys').inherits;
var EventEmitter = require('events').EventEmitter;
var stdio = process.binding('stdio');
exports.createInterface = function (output, isTTY) {
return new Interface(output, isTTY);
exports.createInterface = function (output) {
return new Interface(output);
};
function Interface (output, isTTY) {
function Interface (output) {
this.output = output;
this.setPrompt("node> ");
// Current line
this.line = ""
this._tty = output.fd < 3;
if (!isTTY) {
if (parseInt(process.env['NODE_NO_READLINE'])) {
this._tty = false;
} else {
}
if (this._tty) {
// input refers to stdin
// Current line
this.line = "";
// Check process.env.TERM ?
stdio.setRawMode(true);
this._tty = true;

3
lib/repl.js

@ -45,8 +45,7 @@ function REPLServer(prompt, stream) {
self.stream = stream || process.openStdin();
self.prompt = prompt || "node> ";
var isTTY = (self.stream.fd < 3);
var rli = self.rli = rl.createInterface(self.stream, isTTY);
var rli = self.rli = rl.createInterface(self.stream);
rli.setPrompt(self.prompt);
self.stream.addListener("data", function (chunk) {

Loading…
Cancel
Save