fix: tui: Handle Clipboard.copy errors properly (#3685)

This commit is contained in:
Haris Gušić
2025-11-01 15:34:21 +01:00
committed by GitHub
parent 7df61a74a0
commit 55787f2caa
3 changed files with 17 additions and 4 deletions

View File

@@ -296,8 +296,9 @@ function App() {
/* @ts-expect-error */
renderer.writeOut(finalOsc52)
await Clipboard.copy(text)
.then(() => toast.show({ message: "Copied to clipboard", variant: "info" }))
.catch(toast.error)
renderer.clearSelection()
toast.show({ message: "Copied to clipboard", variant: "info" })
}
}}
>

View File

@@ -49,7 +49,7 @@ function init() {
let timeoutHandle: NodeJS.Timeout | null = null
return {
const toast = {
show(options: ToastOptions) {
const parsedOptions = TuiEvent.ToastShow.properties.parse(options)
const { duration, ...currentToast } = parsedOptions
@@ -59,10 +59,22 @@ function init() {
setStore("currentToast", null)
}, duration).unref()
},
error: (err: any) => {
if (err instanceof Error)
return toast.show({
variant: "error",
message: err.message,
})
toast.show({
variant: "error",
message: "An unknown error has occurred",
})
},
get currentToast(): ToastOptions | null {
return store.currentToast
},
}
return toast
}
export type ToastContext = ReturnType<typeof init>

View File

@@ -76,7 +76,7 @@ export namespace Clipboard {
const proc = Bun.spawn(["wl-copy"], { stdin: "pipe", stdout: "ignore", stderr: "ignore" })
proc.stdin.write(text)
proc.stdin.end()
await proc.exited.catch(() => {})
await proc.exited
}
}
if (Bun.which("xclip")) {
@@ -117,7 +117,7 @@ export namespace Clipboard {
console.log("clipboard: no native support")
return async (text: string) => {
await clipboardy.write(text).catch(() => {})
await clipboardy.write(text)
}
})