From 2b202cbb02820a6e2e2f6590dbb62ec254a90fa6 Mon Sep 17 00:00:00 2001 From: retrozinndev Date: Sun, 11 May 2025 22:03:15 -0300 Subject: [PATCH] :sparkles: ags(runner/plugins): add new clipboard plugin --- ags/runner/plugins/clipboard.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 ags/runner/plugins/clipboard.ts diff --git a/ags/runner/plugins/clipboard.ts b/ags/runner/plugins/clipboard.ts new file mode 100644 index 0000000..67c838e --- /dev/null +++ b/ags/runner/plugins/clipboard.ts @@ -0,0 +1,33 @@ +import { Widget } from "astal/gtk3"; +import { Clipboard } from "../../scripts/clipboard"; +import { ResultWidget, ResultWidgetProps } from "../../widget/runner/ResultWidget"; +import { Runner } from "../Runner"; +import { Gio } from "astal"; + + +export const PluginClipboard = { + prefix: '>', + prioritize: true, + handle: (search) => { + if(Clipboard.getDefault().history.length < 1) + return new ResultWidget({ + icon: "edit-paste-symbolic", + title: "No clipboard items found!", + description: "When something is copied, it'll be shown right here!" + } as ResultWidgetProps); + + return Clipboard.getDefault().history.filter(item => // not the best way to search, but it works + Runner.regExMatch(search, item.id.toString()) || Runner.regExMatch(search, item.preview)).map((item) => + new ResultWidget({ + icon: new Widget.Label({ + label: item.id.toString(), + css: "font-size: 16px; margin-right: 8px; font-weight: 600;" + } as Widget.LabelProps), + title: item.preview, + onClick: () => Clipboard.getDefault().selectItem(item).catch((err: Gio.IOErrorEnum) => { + console.error(`Runner(Plugin/Clipboard): An error occurred while selecting clipboard item. Stderr:\n${ + err.message ? `${err.message}\n` : ""}Stack: ${err.stack}`); + }) + } as ResultWidgetProps)); + } +} as Runner.Plugin;