diff options
author | Shin'ya UEOKA <ueokande@i-beam.org> | 2019-09-27 09:11:33 +0000 |
---|---|---|
committer | Shin'ya UEOKA <ueokande@i-beam.org> | 2019-09-27 09:11:33 +0000 |
commit | ffc20750e99ab2edbfc31748418dc5ecba69039e (patch) | |
tree | 6e83d8b1e5acc5a6e9c9e818d41ab6365d35b437 /e2e | |
parent | fff371ae6e7bb78c4c53adfe08751dc3a0bd7c10 (diff) |
Support clipbard on MacOS
Diffstat (limited to 'e2e')
-rw-r--r-- | e2e/lib/clipboard.ts | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/e2e/lib/clipboard.ts b/e2e/lib/clipboard.ts index 13d95df..c1eddbb 100644 --- a/e2e/lib/clipboard.ts +++ b/e2e/lib/clipboard.ts @@ -37,6 +37,43 @@ const writeLinux = (data: string): Promise<string> => { }); }; +const readDarwin = (): Promise<string> => { + let stdout = '', stderr = ''; + return new Promise((resolve) => { + let pbpaste = spawn('pbpaste'); + pbpaste.stdout.on('data', (data) => { + stdout += data; + }); + pbpaste.stderr.on('data', (data) => { + stderr += data; + }); + pbpaste.on('close', (code) => { + if (code !== 0) { + throw new Error(`pbpaste returns ${code}: ${stderr}`) + } + resolve(stdout); + }); + }); +}; + +const writeDarwin = (data: string): Promise<string> => { + let stderr = ''; + return new Promise((resolve) => { + let pbcopy = spawn('pbcopy'); + pbcopy.stderr.on('data', (data) => { + stderr += data; + }); + pbcopy.on('close', (code) => { + if (code !== 0) { + throw new Error(`pbcopy returns ${code}: ${stderr}`) + } + resolve(); + }); + pbcopy.stdin.write(data); + pbcopy.stdin.end(); + }); +}; + class UnsupportedError extends Error { constructor(platform: string) { super(); @@ -48,6 +85,8 @@ const read = () => { switch (process.platform) { case 'linux': return readLinux(); + case 'darwin': + return readDarwin(); } throw new UnsupportedError(process.platform); } @@ -56,6 +95,8 @@ const write = (data: string) => { switch (process.platform) { case 'linux': return writeLinux(data); + case 'darwin': + return writeDarwin(data); } throw new UnsupportedError(process.platform); } |