From ce26c8a75460948bccf412b3c559ea9a5777131f Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sat, 19 Jul 2025 14:25:39 +1000 Subject: feat: fzf-like search instead of fuzzy Also add license for fuzzysort lib --- modules/launcher/Actions.qml | 23 +++++++---------------- modules/launcher/AppList.qml | 8 ++++---- modules/launcher/M3Variants.qml | 23 +++++++---------------- modules/launcher/Schemes.qml | 21 ++++++--------------- 4 files changed, 24 insertions(+), 51 deletions(-) (limited to 'modules') diff --git a/modules/launcher/Actions.qml b/modules/launcher/Actions.qml index 4572a61..0e658f0 100644 --- a/modules/launcher/Actions.qml +++ b/modules/launcher/Actions.qml @@ -1,18 +1,17 @@ pragma Singleton -import "root:/utils/scripts/fuzzysort.js" as Fuzzy import qs.services import qs.config +import qs.utils import Quickshell -import Quickshell.Io import QtQuick -Singleton { +Searcher { id: root property string qalcResult - readonly property list list: [ + readonly property list actions: [ Action { name: qsTr("Calculator") desc: qsTr("Do simple math equations (powered by Qalc)") @@ -134,24 +133,16 @@ Singleton { } ] - readonly property list preppedActions: list.filter(a => !a.disabled).map(a => ({ - name: Fuzzy.prepare(a.name), - desc: Fuzzy.prepare(a.desc), - action: a - })) - - function fuzzyQuery(search: string): var { - return Fuzzy.go(search.slice(Config.launcher.actionPrefix.length), preppedActions, { - all: true, - keys: ["name", "desc"], - scoreFn: r => r[0].score > 0 ? r[0].score * 0.9 + r[1].score * 0.1 : 0 - }).map(r => r.obj.action); + function transformSearch(search: string): string { + return search.slice(Config.launcher.actionPrefix.length); } function autocomplete(list: AppList, text: string): void { list.search.text = `${Config.launcher.actionPrefix}${text} `; } + list: actions.filter(a => !a.disabled) + component Action: QtObject { required property string name required property string desc diff --git a/modules/launcher/AppList.qml b/modules/launcher/AppList.qml index 891c362..857515a 100644 --- a/modules/launcher/AppList.qml +++ b/modules/launcher/AppList.qml @@ -23,14 +23,14 @@ StyledListView { if (isCalc) return [0]; if (isScheme) - return Schemes.fuzzyQuery(text); + return Schemes.query(text); if (isVariant) - return M3Variants.fuzzyQuery(text); + return M3Variants.query(text); if (isAction) - return Actions.fuzzyQuery(text); + return Actions.query(text); if (text.startsWith(Config.launcher.actionPrefix)) text = search.text.slice(Config.launcher.actionPrefix.length); - return Apps.fuzzyQuery(text); + return Apps.query(text); } model: ScriptModel { diff --git a/modules/launcher/M3Variants.qml b/modules/launcher/M3Variants.qml index 3cafd5c..4312ff1 100644 --- a/modules/launcher/M3Variants.qml +++ b/modules/launcher/M3Variants.qml @@ -1,14 +1,17 @@ pragma Singleton -import "root:/utils/scripts/fuzzysort.js" as Fuzzy -import qs.config +import qs.utils import Quickshell import QtQuick -Singleton { +Searcher { id: root - readonly property list list: [ + function transformSearch(search: string): var { + return search.slice(`${Config.launcher.actionPrefix}variant `.length); + } + + list: [ Variant { variant: "vibrant" icon: "sentiment_very_dissatisfied" @@ -65,18 +68,6 @@ Singleton { } ] - readonly property list preppedVariants: list.map(v => ({ - name: Fuzzy.prepare(v.variant), - variant: v - })) - - function fuzzyQuery(search: string): var { - return Fuzzy.go(search.slice(`${Config.launcher.actionPrefix}variant `.length), preppedVariants, { - all: true, - key: "name" - }).map(r => r.obj.variant); - } - component Variant: QtObject { required property string variant required property string icon diff --git a/modules/launcher/Schemes.qml b/modules/launcher/Schemes.qml index 534e456..2be8558 100644 --- a/modules/launcher/Schemes.qml +++ b/modules/launcher/Schemes.qml @@ -1,28 +1,19 @@ pragma Singleton -import "root:/utils/scripts/fuzzysort.js" as Fuzzy -import qs.config +import qs.utils import Quickshell import Quickshell.Io import QtQuick -Singleton { +Searcher { id: root - readonly property list preppedSchemes: schemes.instances.map(s => ({ - name: Fuzzy.prepare(s.name), - flavour: Fuzzy.prepare(s.flavour), - scheme: s - })) - - function fuzzyQuery(search: string): var { - return Fuzzy.go(search.slice(`${Config.launcher.actionPrefix}scheme `.length), preppedSchemes, { - all: true, - keys: ["name", "flavour"], - scoreFn: r => r[0].score > 0 ? r[0].score * 0.9 + r[1].score * 0.1 : 0 - }).map(r => r.obj.scheme); + function transformSearch(search: string): var { + return search.slice(`${Config.launcher.actionPrefix}scheme `.length); } + list: schemes.instances + Variants { id: schemes -- cgit v1.2.3-freya