diff --git a/core/client_term.js b/core/client_term.js index 2cf90ac3..42d71a77 100644 --- a/core/client_term.js +++ b/core/client_term.js @@ -144,21 +144,23 @@ ClientTerminal.prototype.isANSI = function() { // :TODO: probably need to update these to convert IAC (0xff) -> IACIAC (escape it) -ClientTerminal.prototype.write = function(s, convertLineFeeds) { - this.rawWrite(this.encode(s, convertLineFeeds)); +ClientTerminal.prototype.write = function(s, convertLineFeeds, cb) { + this.rawWrite(this.encode(s, convertLineFeeds), cb); }; -ClientTerminal.prototype.rawWrite = function(s) { +ClientTerminal.prototype.rawWrite = function(s, cb) { if(this.output) { this.output.write(s, function written(err) { - if(err) { + if(_.isFunction(cb)) { + cb(err); + } else if(err) { Log.warn('Failed writing to socket: ' + err.toString()); } }); } }; -ClientTerminal.prototype.pipeWrite = function(s, spec) { +ClientTerminal.prototype.pipeWrite = function(s, spec, cb) { spec = spec || 'renegade'; var conv = { @@ -166,11 +168,12 @@ ClientTerminal.prototype.pipeWrite = function(s, spec) { renegade : renegadeToAnsi, }[spec] || enigmaToAnsi; - this.write(conv(s, this)); + this.write(conv(s, this), null, cb); // null = use default for |convertLineFeeds| }; ClientTerminal.prototype.encode = function(s, convertLineFeeds) { - convertLineFeeds = _.isUndefined(convertLineFeeds) ? this.convertLF : convertLineFeeds; + convertLineFeeds = _.isBoolean(convertLineFeeds) ? convertLineFeeds : this.convertLF; + if(convertLineFeeds && _.isString(s)) { s = s.replace(/\n/g, '\r\n'); }