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