From 06eff60cabb55d91fe4075421b1693b1ab33225c Mon Sep 17 00:00:00 2001 From: Reuben Tier <64310361+TheOtterlord@users.noreply.github.com> Date: Fri, 13 Sep 2024 12:45:30 +0100 Subject: [PATCH] Add copy support for Wayland via wl-copy (#11964) * Add wl-copy support * Add changeset * set to patch --------- Co-authored-by: Erika <3019731+Princesseuh@users.noreply.github.com> --- .changeset/two-suns-admire.md | 5 ++++ packages/astro/src/cli/info/index.ts | 34 ++++++++++++++++++---------- 2 files changed, 27 insertions(+), 12 deletions(-) create mode 100644 .changeset/two-suns-admire.md diff --git a/.changeset/two-suns-admire.md b/.changeset/two-suns-admire.md new file mode 100644 index 000000000000..36fb5f5ba39c --- /dev/null +++ b/.changeset/two-suns-admire.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Add wayland (wl-copy) support to `astro info` diff --git a/packages/astro/src/cli/info/index.ts b/packages/astro/src/cli/info/index.ts index 3fa91802f26e..3bb2216c0c94 100644 --- a/packages/astro/src/cli/info/index.ts +++ b/packages/astro/src/cli/info/index.ts @@ -55,6 +55,7 @@ export async function printInfo({ flags }: InfoOptions) { } async function copyToClipboard(text: string) { + text = text.trim() const system = platform(); let command = ''; if (system === 'darwin') { @@ -62,18 +63,26 @@ async function copyToClipboard(text: string) { } else if (system === 'win32') { command = 'clip'; } else { - try { - // Unix: check if `xclip` is installed - const output = execSync('which xclip', { encoding: 'utf8' }); - if (output[0] !== '/') { - // Did not find a path for xclip, bail out! - return; + // Unix: check if a supported command is installed + const unixCommands = [ + ['xclip', '-sel clipboard -l 1'], + ['wl-copy', '"$0"'] + ] + for (const [unixCommand, args] of unixCommands) { + try { + const output = execSync(`which ${unixCommand}`, { encoding: 'utf8', stdio: 'pipe' }); + if (output[0] !== '/') { + // Did not find a path. Skip! + continue; + } + command = `${unixCommand} ${args}`; + } catch { + // Failed to execute which. Skip! + continue; } - command = 'xclip -sel clipboard -l 1'; - } catch { - // Did not find xclip, bail out! - return; } + // Did not find supported command. Bail out! + if (!command) return; } console.log(); @@ -86,8 +95,9 @@ async function copyToClipboard(text: string) { if (!shouldCopy) return; try { - execSync(command, { - input: text.trim(), + execSync(command.replaceAll('$0', text), { + stdio: 'ignore', + input: text, encoding: 'utf8', }); } catch {