| 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);
 
 
  |