diff options
Diffstat (limited to 'e2e/lib')
| -rw-r--r-- | e2e/lib/clipboard.js | 63 | 
1 files changed, 63 insertions, 0 deletions
| diff --git a/e2e/lib/clipboard.js b/e2e/lib/clipboard.js new file mode 100644 index 0000000..4061dbd --- /dev/null +++ b/e2e/lib/clipboard.js @@ -0,0 +1,63 @@ +'use strict'; + +const { spawn } = require('child_process'); + +const readLinux = () => { +  let stdout = '', stderr = ''; +  return new Promise((resolve, reject) => { +    let xsel = spawn('xsel', ['--clipboard', '--output']); +    xsel.stdout.on('data', (data) => { +      stdout += data; +    }); +    xsel.stderr.on('data', (data) => { +      stderr += data; +    }); +    xsel.on('close', (code) => { +      if (code !== 0) { +        throw new Error(`xsel returns ${code}: ${stderr}`) +      } +      resolve(stdout); +    }); +  }); +}; + +const writeLinux = (data) => { +  let stdout = '', stderr = ''; +  return new Promise((resolve, reject) => { +    let xsel = spawn('xsel', ['--clipboard', '--input']); +    xsel.stderr.on('data', (data) => { +      stderr += data; +    }); +    xsel.on('close', (code) => { +      if (code !== 0) { +        throw new Error(`xsel returns ${code}: ${stderr}`) +      } +      resolve(); +    }); +    xsel.stdin.write(data); +    xsel.stdin.end(); +  }); +}; + +const unsupported = (os) => { +  return () => { +    throw new Error(`Unsupported os: ${os}`); +  }; +}; + +const detect = () => { +  switch (process.platform) { +    case 'linux': +      return { +        read: readLinux, +        write: writeLinux, +      }; +    default: +      return { +        read: unsupported(process.platform), +        write: unsupported(process.platform), +      }; +  } +} + +module.exports = detect(); | 
