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 ]
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)
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.
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;
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) {