116 lines
3.1 KiB
JavaScript
116 lines
3.1 KiB
JavaScript
var child_process = require("child_process");
|
|
var spawn = child_process.spawn;
|
|
var util = require("util");
|
|
|
|
var execSync = (function() {
|
|
if(child_process.execSync) { // Use native execSync if avaiable
|
|
return function(cmd) { return child_process.execSync(cmd); };
|
|
} else {
|
|
try { // Try using fallback package if available
|
|
var execSync = require("sync-exec");
|
|
return function(cmd) { return execSync(cmd).stdout; };
|
|
} catch(e) {}
|
|
}
|
|
|
|
return null;
|
|
})();
|
|
|
|
var config;
|
|
|
|
switch(process.platform) {
|
|
case "darwin":
|
|
config = require("./platform/darwin");
|
|
break;
|
|
case "win32":
|
|
config = require("./platform/win32");
|
|
break;
|
|
case "linux":
|
|
config = require("./platform/linux");
|
|
break;
|
|
case "freebsd":
|
|
config = require("./platform/linux");
|
|
break;
|
|
case "openbsd":
|
|
config = require("./platform/openbsd");
|
|
break;
|
|
default:
|
|
throw new Error("Unknown platform: '" + process.platform + "'. Send this error to xavi.rmz@gmail.com.");
|
|
}
|
|
|
|
var noop = function() {};
|
|
|
|
exports.copy = function(text, callback) {
|
|
var child = spawn(config.copy.command, config.copy.args);
|
|
|
|
var done = (callback ? function() { callback.apply(this, arguments); done = noop; } : noop);
|
|
|
|
var err = [];
|
|
|
|
child.stdin.on("error", function (err) { done(err); });
|
|
child
|
|
.on("exit", function() { done(null, text); })
|
|
.on("error", function(err) { done(err); })
|
|
.stderr
|
|
.on("data", function(chunk) { err.push(chunk); })
|
|
.on("end", function() {
|
|
if(err.length === 0) { return; }
|
|
done(new Error(config.decode(err)));
|
|
})
|
|
;
|
|
|
|
if(text.pipe) { text.pipe(child.stdin); }
|
|
else {
|
|
var output, type = Object.prototype.toString.call(text);
|
|
|
|
if(type === "[object String]") { output = text; }
|
|
else if(type === "[object Object]") { output = util.inspect(text, { depth: null }); }
|
|
else if(type === "[object Array]") { output = util.inspect(text, { depth: null }); }
|
|
else { output = text.toString(); }
|
|
|
|
child.stdin.end(config.encode(output));
|
|
}
|
|
|
|
return text;
|
|
};
|
|
|
|
var pasteCommand = [ config.paste.command ].concat(config.paste.args).join(" ");
|
|
exports.paste = function(callback) {
|
|
if(execSync && !callback) { return config.decode(execSync(pasteCommand)); }
|
|
else if(callback) {
|
|
var child = spawn(config.paste.command, config.paste.args);
|
|
|
|
var done = callback && function() { callback.apply(this, arguments); done = noop; };
|
|
|
|
var data = [], err = [];
|
|
|
|
child.on("error", function(err) { done(err); });
|
|
child.stdout
|
|
.on("data", function(chunk) { data.push(chunk); })
|
|
.on("end", function() { done(null, config.decode(data)); })
|
|
;
|
|
child.stderr
|
|
.on("data", function(chunk) { err.push(chunk); })
|
|
.on("end", function() {
|
|
if(err.length === 0) { return; }
|
|
|
|
done(new Error(config.decode(err)));
|
|
})
|
|
;
|
|
} else {
|
|
throw new Error("A synchronous version of paste is not supported on this platform.");
|
|
}
|
|
};
|
|
|
|
exports.silent = function() {
|
|
throw new Error("DEPRECATED: copy-paste is now always silent.");
|
|
};
|
|
|
|
exports.noConflict = function() {
|
|
throw new Error("DEPRECATED: copy-paste no longer adds global variables by default.");
|
|
};
|
|
exports.global = function() {
|
|
GLOBAL.copy = exports.copy;
|
|
GLOBAL.paste = exports.paste;
|
|
|
|
return exports;
|
|
};
|