From e3ce73a2145cb4e44a0a9ffeef78e22f3e91f21f Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Thu, 30 Dec 2010 01:34:31 -0800 Subject: [PATCH] Add ability to ask question from readline --- lib/readline.js | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/lib/readline.js b/lib/readline.js index cc62922623..341b20b479 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 */