Browse Source

Add ability to ask question from readline

v0.7.4-release
Ryan Dahl 14 years ago
parent
commit
e3ce73a214
  1. 34
      lib/readline.js

34
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 */

Loading…
Cancel
Save