|
|
@@ -125,9 +125,25 @@ export namespace Clipboard {
|
|
|
if (os === "win32") {
|
|
|
console.log("clipboard: using powershell")
|
|
|
return async (text: string) => {
|
|
|
- // need to escape backticks because powershell uses them as escape code
|
|
|
- const escaped = text.replace(/"/g, '""').replace(/`/g, "``")
|
|
|
- await $`powershell -NonInteractive -NoProfile -Command "Set-Clipboard -Value \"${escaped}\""`.nothrow().quiet()
|
|
|
+ // Pipe via stdin to avoid PowerShell string interpolation ($env:FOO, $(), etc.)
|
|
|
+ const proc = Bun.spawn(
|
|
|
+ [
|
|
|
+ "powershell.exe",
|
|
|
+ "-NonInteractive",
|
|
|
+ "-NoProfile",
|
|
|
+ "-Command",
|
|
|
+ "[Console]::InputEncoding = [System.Text.Encoding]::UTF8; Set-Clipboard -Value ([Console]::In.ReadToEnd())",
|
|
|
+ ],
|
|
|
+ {
|
|
|
+ stdin: "pipe",
|
|
|
+ stdout: "ignore",
|
|
|
+ stderr: "ignore",
|
|
|
+ },
|
|
|
+ )
|
|
|
+
|
|
|
+ proc.stdin.write(text)
|
|
|
+ proc.stdin.end()
|
|
|
+ await proc.exited.catch(() => {})
|
|
|
}
|
|
|
}
|
|
|
|