mirror of
https://github.com/danbulant/dots-hyprland
synced 2026-05-24 12:22:09 +00:00
65 lines
1.9 KiB
QML
65 lines
1.9 KiB
QML
pragma Singleton
|
|
pragma ComponentBehavior: Bound
|
|
|
|
import "root:/modules/common/functions/fuzzysort.js" as Fuzzy
|
|
import "root:/modules/common/functions/levendist.js" as Levendist
|
|
import "root:/modules/common"
|
|
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
|
|
/**
|
|
* Emojis.
|
|
*/
|
|
Singleton {
|
|
id: root
|
|
property string emojiScriptPath: `${Directories.config}/hypr/hyprland/scripts/fuzzel-emoji.sh`
|
|
property string lineBeforeData: "### DATA ###"
|
|
property list<var> list
|
|
readonly property var preparedEntries: list.map(a => ({
|
|
name: Fuzzy.prepare(`${a}`),
|
|
entry: a
|
|
}))
|
|
function fuzzyQuery(search: string): var {
|
|
if (root.sloppySearch) {
|
|
const results = entries.slice(0, 100).map(str => ({
|
|
entry: str,
|
|
score: Levendist.computeTextMatchScore(str.toLowerCase(), search.toLowerCase())
|
|
})).filter(item => item.score > root.scoreThreshold)
|
|
.sort((a, b) => b.score - a.score)
|
|
return results
|
|
.map(item => item.entry)
|
|
}
|
|
|
|
return Fuzzy.go(search, preparedEntries, {
|
|
all: true,
|
|
key: "name"
|
|
}).map(r => {
|
|
return r.obj.entry
|
|
});
|
|
}
|
|
|
|
function load() {
|
|
emojiFileView.reload()
|
|
}
|
|
|
|
function updateEmojis(fileContent) {
|
|
const lines = fileContent.split("\n")
|
|
const dataIndex = lines.indexOf(root.lineBeforeData)
|
|
if (dataIndex === -1) {
|
|
console.warn("No data section found in emoji script file.")
|
|
return
|
|
}
|
|
const emojis = lines.slice(dataIndex + 1).filter(line => line.trim() !== "")
|
|
root.list = emojis.map(line => line.trim())
|
|
}
|
|
|
|
FileView {
|
|
id: emojiFileView
|
|
path: Qt.resolvedUrl(root.emojiScriptPath)
|
|
onLoadedChanged: {
|
|
const fileContent = emojiFileView.text()
|
|
root.updateEmojis(fileContent)
|
|
}
|
|
}
|
|
}
|