| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | 'use strict';const path = require('path');const execa = require('execa');const xsel = 'xsel';const xselFallback = path.join(__dirname, '../fallbacks/linux/xsel');const copyArguments = ['--clipboard', '--input'];const pasteArguments = ['--clipboard', '--output'];const makeError = (xselError, fallbackError) => {	let error;	if (xselError.code === 'ENOENT') {		error = new Error('Couldn\'t find the `xsel` binary and fallback didn\'t work. On Debian/Ubuntu you can install xsel with: sudo apt install xsel');	} else {		error = new Error('Both xsel and fallback failed');		error.xselError = xselError;	}	error.fallbackError = fallbackError;	return error;};const xselWithFallback = async (argumentList, options) => {	try {		return await execa.stdout(xsel, argumentList, options);	} catch (xselError) {		try {			return await execa.stdout(xselFallback, argumentList, options);		} catch (fallbackError) {			throw makeError(xselError, fallbackError);		}	}};const xselWithFallbackSync = (argumentList, options) => {	try {		return execa.sync(xsel, argumentList, options);	} catch (xselError) {		try {			return execa.sync(xselFallback, argumentList, options);		} catch (fallbackError) {			throw makeError(xselError, fallbackError);		}	}};module.exports = {	copy: async options => {		await xselWithFallback(copyArguments, options);	},	copySync: options => {		xselWithFallbackSync(copyArguments, options);	},	paste: options => xselWithFallback(pasteArguments, options),	pasteSync: options => xselWithFallbackSync(pasteArguments, options)};
 |