| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 | // Generated by CoffeeScript 1.12.7/*  ExternalEditor  Kevin Gravier <kevin@mrkmg.com>  MIT */(function() {  var ChatDet, CreateFileError, ExternalEditor, FS, IConvLite, LaunchEditorError, ReadFileError, RemoveFileError, Spawn, SpawnSync, Temp,    bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };  FS = require('fs');  Temp = require('tmp');  SpawnSync = require('child_process').spawnSync;  Spawn = require('child_process').spawn;  IConvLite = require('iconv-lite');  ChatDet = require('chardet');  CreateFileError = require('./errors/CreateFileError');  ReadFileError = require('./errors/ReadFileError');  RemoveFileError = require('./errors/RemoveFileError');  LaunchEditorError = require('./errors/LaunchEditorError');  ExternalEditor = (function() {    ExternalEditor.edit = function(text) {      var editor;      if (text == null) {        text = '';      }      editor = new ExternalEditor(text);      editor.run();      editor.cleanup();      return editor.text;    };    ExternalEditor.editAsync = function(text, callback) {      var editor;      if (text == null) {        text = '';      }      editor = new ExternalEditor(text);      return editor.runAsync(function(error_run, text) {        var error_cleanup;        if (!error_run) {          try {            editor.cleanup();            if (typeof callback === 'function') {              return setImmediate(callback, null, text);            }          } catch (error) {            error_cleanup = error;            if (typeof callback === 'function') {              return setImmediate(callback, error_cleanup, null);            }          }        } else {          if (typeof callback === 'function') {            return setImmediate(callback, error_run, null);          }        }      });    };    ExternalEditor.CreateFileError = CreateFileError;    ExternalEditor.ReadFileError = ReadFileError;    ExternalEditor.RemoveFileError = RemoveFileError;    ExternalEditor.LaunchEditorError = LaunchEditorError;    ExternalEditor.prototype.text = '';    ExternalEditor.prototype.temp_file = void 0;    ExternalEditor.prototype.editor = {      bin: void 0,      args: []    };    ExternalEditor.prototype.last_exit_status = void 0;    function ExternalEditor(text1) {      this.text = text1 != null ? text1 : '';      this.launchEditorAsync = bind(this.launchEditorAsync, this);      this.launchEditor = bind(this.launchEditor, this);      this.removeTemporaryFile = bind(this.removeTemporaryFile, this);      this.readTemporaryFile = bind(this.readTemporaryFile, this);      this.createTemporaryFile = bind(this.createTemporaryFile, this);      this.determineEditor = bind(this.determineEditor, this);      this.cleanup = bind(this.cleanup, this);      this.runAsync = bind(this.runAsync, this);      this.run = bind(this.run, this);      this.determineEditor();      this.createTemporaryFile();    }    ExternalEditor.prototype.run = function() {      this.launchEditor();      return this.readTemporaryFile();    };    ExternalEditor.prototype.runAsync = function(callback) {      var error_launch;      try {        return this.launchEditorAsync((function(_this) {          return function() {            var error_read;            try {              _this.readTemporaryFile();              if (typeof callback === 'function') {                return setImmediate(callback, null, _this.text);              }            } catch (error) {              error_read = error;              if (typeof callback === 'function') {                return setImmediate(callback, error_read, null);              }            }          };        })(this));      } catch (error) {        error_launch = error;        if (typeof callback === 'function') {          return setImmediate(callback, error_launch, null);        }      }    };    ExternalEditor.prototype.cleanup = function() {      return this.removeTemporaryFile();    };    ExternalEditor.prototype.determineEditor = function() {      var args, ed, editor;      ed = /^win/.test(process.platform) ? 'notepad' : 'vim';      editor = process.env.VISUAL || process.env.EDITOR || ed;      args = editor.split(/\s+/);      this.editor.bin = args.shift();      return this.editor.args = args;    };    ExternalEditor.prototype.createTemporaryFile = function() {      var e;      try {        this.temp_file = Temp.tmpNameSync({});        return FS.writeFileSync(this.temp_file, this.text, {          encoding: 'utf8'        });      } catch (error) {        e = error;        throw new CreateFileError(e);      }    };    ExternalEditor.prototype.readTemporaryFile = function() {      var buffer, e, encoding;      try {        buffer = FS.readFileSync(this.temp_file);        if (!buffer.length) {          return this.text = '';        }        encoding = ChatDet.detect(buffer);        return this.text = IConvLite.decode(buffer, encoding);      } catch (error) {        e = error;        throw new ReadFileError(e);      }    };    ExternalEditor.prototype.removeTemporaryFile = function() {      var e;      try {        return FS.unlinkSync(this.temp_file);      } catch (error) {        e = error;        throw new RemoveFileError(e);      }    };    ExternalEditor.prototype.launchEditor = function() {      var e, run;      try {        run = SpawnSync(this.editor.bin, this.editor.args.concat([this.temp_file]), {          stdio: 'inherit'        });        return this.last_exit_status = run.status;      } catch (error) {        e = error;        throw new LaunchEditorError(e);      }    };    ExternalEditor.prototype.launchEditorAsync = function(callback) {      var child_process, e;      try {        child_process = Spawn(this.editor.bin, this.editor.args.concat([this.temp_file]), {          stdio: 'inherit'        });        return child_process.on('exit', (function(_this) {          return function(code) {            _this.last_exit_status = code;            if (typeof callback === 'function') {              return callback();            }          };        })(this));      } catch (error) {        e = error;        throw new LaunchEditorError(e);      }    };    return ExternalEditor;  })();  module.exports = ExternalEditor;}).call(this);
 |