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);
+ }
};
};
+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 '';
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) {
case 13: /* enter */
var line = this._addHistory();
this.output.write('\r\n');
- this.emit('line', line);
+ this._onLine(line);
break;
case 127: /* backspace */