Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2010-12-30 12:34:31 +0300
committerRyan Dahl <ry@tinyclouds.org>2010-12-30 12:35:01 +0300
commite3ce73a2145cb4e44a0a9ffeef78e22f3e91f21f (patch)
treecb09b5263c6406f64532183ab7556fe23baa97d8 /lib
parent54b1f8028aceff9b3c3adcbe6e41def37dd1b890 (diff)
Add ability to ask question from readline
Diffstat (limited to 'lib')
-rw-r--r--lib/readline.js34
1 files changed, 31 insertions, 3 deletions
diff --git a/lib/readline.js b/lib/readline.js
index cc62922623b..341b20b4795 100644
--- a/lib/readline.js
+++ b/lib/readline.js
@@ -83,7 +83,13 @@ Interface.prototype.__defineGetter__('columns', function() {
Interface.prototype.setPrompt = function(prompt, length) {
this._prompt = prompt;
- this._promptLength = length ? length : Buffer.byteLength(prompt);
+ if (length) {
+ this._promptLength = length;
+ } else {
+ var lines = prompt.split(/[\r\n]/);
+ var lastLine = lines[lines.length - 1];
+ this._promptLength = Buffer.byteLength(lastLine);
+ }
};
@@ -97,6 +103,28 @@ Interface.prototype.prompt = function() {
};
+Interface.prototype.question = function(query, cb) {
+ if (cb) {
+ this._oldPrompt = this._prompt;
+ this.setPrompt(query);
+ this._questionCallback = cb;
+ this.prompt();
+ }
+};
+
+
+Interface.prototype._onLine = function(line) {
+ if (this._questionCallback) {
+ var cb = this._questionCallback;
+ this._questionCallback = null;
+ this.setPrompt(this._oldPrompt);
+ cb(line)
+ } else {
+ this.emit('line', line);
+ }
+};
+
+
Interface.prototype._addHistory = function() {
if (this.line.length === 0) return '';
@@ -149,7 +177,7 @@ Interface.prototype.write = function(d) {
Interface.prototype._normalWrite = function(b) {
// Very simple implementation right now. Should try to break on
// new lines.
- this.emit('line', b.toString());
+ this._onLine(b.toString());
};
Interface.prototype._insertString = function(c) {
@@ -304,7 +332,7 @@ Interface.prototype._ttyWrite = function(b) {
case 13: /* enter */
var line = this._addHistory();
this.output.write('\r\n');
- this.emit('line', line);
+ this._onLine(line);
break;
case 127: /* backspace */