mirror of https://github.com/lukechilds/node.git
David Trejo
14 years ago
committed by
Ryan Dahl
1 changed files with 133 additions and 0 deletions
@ -0,0 +1,133 @@ |
|||
## Readline |
|||
|
|||
To use this module, do `require('readline')`. Readline allows reading of a |
|||
stream (such as STDIN) on a line-by-line basis. |
|||
|
|||
Note that once you've invoked this module, your node program will not |
|||
terminate until you've closed the interface, and the STDIN stream. Here's how |
|||
to allow your program to gracefully terminate: |
|||
|
|||
var rl = require('readline'); |
|||
|
|||
var i = rl.createInterface(process.sdtin, process.stdout, null); |
|||
i.question("What do you think of node.js?", function(answer) { |
|||
// TODO: Log the answer in a database |
|||
console.log("Thank you for your valuable feedback."); |
|||
|
|||
// These two lines together allow the program to terminate. Without |
|||
// them, it would run forever. |
|||
i.close(); |
|||
process.stdin.destroy(); |
|||
}); |
|||
|
|||
### rl.createInterface(input, output, completer) |
|||
|
|||
Takes two streams and creates a readline interface. The `completer` function |
|||
is used for autocompletion. When given a substring, it returns `[[substr1, |
|||
substr2, ...], originalsubstring]`. |
|||
|
|||
`createInterface` is commonly used with `process.stdin` and |
|||
`process.stdout` in order to accept user input: |
|||
|
|||
var readline = require('readline'), |
|||
rl = readline.createInterface(process.stdin, process.stdout); |
|||
|
|||
### rl.setPrompt(prompt, length) |
|||
|
|||
Sets the prompt, for example when you run `node` on the command line, you see |
|||
`> `, which is node's prompt. |
|||
|
|||
### rl.prompt() |
|||
|
|||
Readies readline for input from the user, putting the current `setPrompt` |
|||
options on a new line, giving the user a new spot to write. |
|||
|
|||
<!-- ### rl.getColumns() Not available? --> |
|||
|
|||
### rl.question(query, callback) |
|||
|
|||
Prepends the prompt with `query` and invokes `callback` with the user's |
|||
response. Displays the query to the user, and then invokes `callback` with the |
|||
user's response after it has been typed. |
|||
|
|||
Example usage: |
|||
|
|||
interface.question('What is your favorite food?', function(answer) { |
|||
console.log('Oh, so your favorite food is ' + answer); |
|||
}); |
|||
|
|||
### rl.close() |
|||
|
|||
Closes tty. |
|||
|
|||
### rl.pause() |
|||
|
|||
Pauses tty. |
|||
|
|||
### rl.resume() |
|||
|
|||
Resumes tty. |
|||
|
|||
### rl.write() |
|||
|
|||
Writes to tty. |
|||
|
|||
### Event: 'line' |
|||
|
|||
`function (line) {}` |
|||
|
|||
Emitted whenever the `in` stream receives a `\n`, usually received when the |
|||
user hits enter, or return. This is a good hook to listen for user input. |
|||
|
|||
Example of listening for `line`: |
|||
|
|||
rl.on('line', function (cmd) { |
|||
console.log('You just typed: '+cmd); |
|||
}); |
|||
|
|||
### Event: 'close' |
|||
|
|||
`function () {}` |
|||
|
|||
Emitted whenever the `in` stream receives a `^C` or `^D`, respectively known |
|||
as `SIGINT` and `EOT`. This is a good way to know the user is finished using |
|||
your program. |
|||
|
|||
Example of listening for `close`, and exiting the program afterward: |
|||
|
|||
rl.on('close', function() { |
|||
console.log('goodbye!'); |
|||
process.exit(0); |
|||
}); |
|||
|
|||
Here's an example of how to use all these together to craft a tiny command |
|||
line interface: |
|||
|
|||
var readline = require('readline'), |
|||
rl = readline.createInterface(process.stdin, process.stdout), |
|||
prefix = 'OHAI> '; |
|||
|
|||
rl.on('line', function(line) { |
|||
switch(line.trim()) { |
|||
case 'hello': |
|||
console.log('world!'); |
|||
break; |
|||
default: |
|||
console.log('Say what? I might have heard `' + line.trim() + '`'); |
|||
break; |
|||
} |
|||
rl.setPrompt(prefix, prefix.length); |
|||
rl.prompt(); |
|||
}).on('close', function() { |
|||
console.log('Have a great day!'); |
|||
process.exit(0); |
|||
}); |
|||
console.log(prefix + 'Good to see you. Try typing stuff.'); |
|||
rl.setPrompt(prefix, prefix.length); |
|||
rl.prompt(); |
|||
|
|||
|
|||
Take a look at this slightly more complicated |
|||
[example](https://gist.github.com/901104), and |
|||
[http-console](http://github.com/cloudhead/http-console) for a real-life use |
|||
case. |
Loading…
Reference in new issue