1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | "use strict" ;
|
28 |
|
29 |
|
30 |
|
31 | const Promise = require( 'seventh' ) ;
|
32 | const string = require( 'string-kit' ) ;
|
33 |
|
34 | require( './patches.js' ) ;
|
35 | const execAsync = require( 'child_process' ).execAsync ;
|
36 | const execFileAsync = require( 'child_process' ).execFileAsync ;
|
37 | const spawn = require( 'child_process' ).spawn ;
|
38 |
|
39 |
|
40 |
|
41 | const XCLIP_SELECTION_ARG = {
|
42 | c: 'clipboard' ,
|
43 | p: 'primary' ,
|
44 | s: 'secondary'
|
45 | } ;
|
46 |
|
47 |
|
48 |
|
49 | if ( process.platform === 'linux' ) {
|
50 | exports.getClipboard = async ( source ) => {
|
51 | var arg = XCLIP_SELECTION_ARG[ source[ 0 ] ] || 'clipboard' ;
|
52 | return await execFileAsync( 'xclip' , [ '-o' , '-selection' , arg ] ) ;
|
53 | } ;
|
54 |
|
55 | exports.setClipboard = async ( str , source ) => {
|
56 | var promise = new Promise() ;
|
57 | var arg = XCLIP_SELECTION_ARG[ source[ 0 ] ] || 'clipboard' ;
|
58 | var xclip = spawn( 'xclip' , [ '-i' , '-selection' , arg ] ) ;
|
59 |
|
60 | xclip.on( 'error' , error => {
|
61 |
|
62 | promise.reject( error ) ;
|
63 | } ) ;
|
64 |
|
65 | xclip.on( 'exit' , code => {
|
66 |
|
67 | if ( code !== 0 ) { promise.reject( code ) ; }
|
68 | else { promise.resolve() ; }
|
69 | } ) ;
|
70 |
|
71 |
|
72 | xclip.stdin.end( str ) ;
|
73 |
|
74 | return promise ;
|
75 | } ;
|
76 | }
|
77 | else {
|
78 | exports.getClipboard = () => Promise.reject( new Error( 'No clipboard manipulation program found' ) ) ;
|
79 | exports.setClipboard = () => Promise.reject( new Error( 'No clipboard manipulation program found' ) ) ;
|
80 | }
|
81 |
|