From 52d1884003144de1d011189127bed6d06c57ed66 Mon Sep 17 00:00:00 2001 From: retrozinndev Date: Sat, 26 Apr 2025 22:36:57 -0300 Subject: [PATCH] :sparkles: ags(runner): add initialText property to runner --- ags/runner/Runner.ts | 26 +++++++++++++++++++++----- ags/scripts/arg-handler.ts | 6 ++++-- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/ags/runner/Runner.ts b/ags/runner/Runner.ts index ca8f2c2..68f9de5 100644 --- a/ags/runner/Runner.ts +++ b/ags/runner/Runner.ts @@ -7,10 +7,11 @@ import { Windows } from "../windows"; export let runnerInstance: (Gtk.Window|null) = null; -export function startRunnerDefault() { +export function startRunnerDefault(initialText?: string) { return Runner.openRunner({ entryPlaceHolder: "Start typing...", showResultsPlaceHolderOnStartup: false, + initialText } as Runner.RunnerProps, () => [ new ResultWidget({ @@ -43,6 +44,7 @@ export namespace Runner { width?: number; height?: number; entryPlaceHolder?: string; + initialText?: string; showResultsPlaceHolderOnStartup?: boolean; }; @@ -61,6 +63,8 @@ export namespace Runner { readonly handle: (inputText: string) => (ResultWidget|Array|null|undefined); /** ran on runner close */ readonly onClose?: () => void; + /** hide other plugins when using this plugin **/ + prioritize?: boolean; } export function addPlugin(plugin: Runner.Plugin, force?: boolean) { @@ -121,12 +125,20 @@ export namespace Runner { } function getPluginResults(input: string): Array { - const calledPlugins: Array = getPlugins().filter((plugin) => plugin.prefix && input.startsWith(plugin.prefix) ? - plugin : null).concat(getPlugins().filter(plugin => plugin.prefix === undefined)); + let calledPlugins: Array = getPlugins().filter((plugin) => + plugin.prefix ? (input.startsWith(plugin.prefix) ? true : false) : true + ).sort((plugin) => plugin.prefix != null ? 0 : 1); + + for(const plugin of calledPlugins) { + if(plugin.prioritize) { + calledPlugins = [ plugin ]; + break; + } + } return calledPlugins.map(plugin => plugin.handle( - plugin.prefix ? input.replace(plugin.prefix, "") : input - )).filter(value => value !== undefined && value !== null).flat(1); + plugin.prefix ? input.replace(plugin.prefix, "") : input) + ).filter(value => value !== undefined && value !== null).flat(1); } function updateResultsList(entryText: string) { @@ -175,6 +187,10 @@ export namespace Runner { setup: () => { // Init plugins plugins.forEach(plugin => plugin.init && plugin.init()); + if(props?.initialText) { + searchEntry.set_text(props.initialText); + searchEntry.set_position(searchEntry.textLength); + } }, onKeyPressEvent: (_, event: Gdk.Event) => { const keyVal = event.get_keyval()[1]; diff --git a/ags/scripts/arg-handler.ts b/ags/scripts/arg-handler.ts index f3e6e9a..8d09f75 100644 --- a/ags/scripts/arg-handler.ts +++ b/ags/scripts/arg-handler.ts @@ -2,7 +2,7 @@ import { Wireplumber } from "./volume"; import { Windows } from "../windows"; import { restartInstance } from "./reload-handler"; -import { startRunnerDefault } from "../runner/Runner"; +import { runnerInstance, startRunnerDefault } from "../runner/Runner"; import { showWorkspaceNumbers } from "../widget/bar/Workspaces"; import { timeout } from "astal"; @@ -31,7 +31,9 @@ export function handleArguments(request: string): any { `${name}: ${Windows.isVisible(name) ? "open" : "closed" }`).join('\n'); case "runner": - startRunnerDefault(); + !runnerInstance ? + startRunnerDefault(args[1] || undefined) + : runnerInstance.close(); return "Opening runner..." case "show-ws-numbers":