diff options
Diffstat (limited to 'modules/launcher/services/Apps.qml')
| -rw-r--r-- | modules/launcher/services/Apps.qml | 67 |
1 files changed, 64 insertions, 3 deletions
diff --git a/modules/launcher/services/Apps.qml b/modules/launcher/services/Apps.qml index b6999fd..9f87d50 100644 --- a/modules/launcher/services/Apps.qml +++ b/modules/launcher/services/Apps.qml @@ -3,13 +3,11 @@ pragma Singleton import qs.config import qs.utils import Quickshell +import QtQuick Searcher { id: root - list: DesktopEntries.applications.values.filter(a => !a.noDisplay).sort((a, b) => a.name.localeCompare(b.name)) - useFuzzy: Config.launcher.useFuzzy.apps - function launch(entry: DesktopEntry): void { if (entry.runInTerminal) Quickshell.execDetached({ @@ -22,4 +20,67 @@ Searcher { workingDirectory: entry.workingDirectory }); } + + function search(search: string): list<var> { + const prefix = Config.launcher.specialPrefix; + + if (search.startsWith(`${prefix}i `)) { + keys = ["id", "name"]; + weights = [0.9, 0.1]; + } else if (search.startsWith(`${prefix}c `)) { + keys = ["categories", "name"]; + weights = [0.9, 0.1]; + } else if (search.startsWith(`${prefix}d `)) { + keys = ["desc", "name"]; + weights = [0.9, 0.1]; + } else if (search.startsWith(`${prefix}e `)) { + keys = ["execString", "name"]; + weights = [0.9, 0.1]; + } else if (search.startsWith(`${prefix}w `)) { + keys = ["wmClass", "name"]; + weights = [0.9, 0.1]; + } else if (search.startsWith(`${prefix}g `)) { + keys = ["genericName", "name"]; + weights = [0.9, 0.1]; + } else if (search.startsWith(`${prefix}k `)) { + keys = ["keywords", "name"]; + weights = [0.9, 0.1]; + } else { + keys = ["name"]; + weights = [1]; + + if (!search.startsWith(`${prefix}t `)) + return query(search).map(e => e.modelData); + } + + const results = query(search.slice(prefix.length + 2)).map(e => e.modelData); + if (search.startsWith(`${prefix}t `)) + return results.filter(a => a.runInTerminal); + return results; + } + + function selector(item: var): string { + return keys.map(k => item[k]).join(" "); + } + + list: variants.instances + useFuzzy: Config.launcher.useFuzzy.apps + + Variants { + id: variants + + model: [...DesktopEntries.applications.values].sort((a, b) => a.name.localeCompare(b.name)) + + QtObject { + required property DesktopEntry modelData + readonly property string id: modelData.id + readonly property string name: modelData.name + readonly property string desc: modelData.comment + readonly property string execString: modelData.execString + readonly property string wmClass: modelData.startupClass + readonly property string genericName: modelData.genericName + readonly property string categories: modelData.categories.join(" ") + readonly property string keywords: modelData.keywords.join(" ") + } + } } |