diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2010-12-30 12:34:31 +0300 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2010-12-30 12:35:01 +0300 |
commit | e3ce73a2145cb4e44a0a9ffeef78e22f3e91f21f (patch) | |
tree | cb09b5263c6406f64532183ab7556fe23baa97d8 /lib | |
parent | 54b1f8028aceff9b3c3adcbe6e41def37dd1b890 (diff) |
Add ability to ask question from readline
Diffstat (limited to 'lib')
-rw-r--r-- | lib/readline.js | 34 |
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 */ |