Fix applauncher clipboard & math
This commit is contained in:
parent
dd79920d92
commit
cf75e64eb6
1 changed files with 45 additions and 9 deletions
|
|
@ -70,6 +70,13 @@ NLoader {
|
||||||
property var desktopEntries: DesktopEntries.applications.values
|
property var desktopEntries: DesktopEntries.applications.values
|
||||||
property string searchText: ""
|
property string searchText: ""
|
||||||
property int selectedIndex: 0
|
property int selectedIndex: 0
|
||||||
|
|
||||||
|
// Refresh clipboard when user starts typing clipboard commands
|
||||||
|
onSearchTextChanged: {
|
||||||
|
if (searchText.startsWith(">clip")) {
|
||||||
|
ClipboardService.refresh()
|
||||||
|
}
|
||||||
|
}
|
||||||
property var filteredEntries: {
|
property var filteredEntries: {
|
||||||
Logger.log("AppLauncher", "Total desktop entries:", desktopEntries ? desktopEntries.length : 0)
|
Logger.log("AppLauncher", "Total desktop entries:", desktopEntries ? desktopEntries.length : 0)
|
||||||
if (!desktopEntries || desktopEntries.length === 0) {
|
if (!desktopEntries || desktopEntries.length === 0) {
|
||||||
|
|
@ -96,7 +103,7 @@ NLoader {
|
||||||
"isCommand": true,
|
"isCommand": true,
|
||||||
"name": ">calc",
|
"name": ">calc",
|
||||||
"content": "Calculator - evaluate mathematical expressions",
|
"content": "Calculator - evaluate mathematical expressions",
|
||||||
"icon": "calculate",
|
"icon": "tag",
|
||||||
"execute": function () {
|
"execute": function () {
|
||||||
searchText = ">calc "
|
searchText = ">calc "
|
||||||
searchInput.cursorPosition = searchText.length
|
searchInput.cursorPosition = searchText.length
|
||||||
|
|
@ -119,9 +126,6 @@ NLoader {
|
||||||
|
|
||||||
// Handle clipboard history
|
// Handle clipboard history
|
||||||
if (query.startsWith(">clip")) {
|
if (query.startsWith(">clip")) {
|
||||||
if (!ClipboardService.initialized) {
|
|
||||||
ClipboardService.refresh()
|
|
||||||
}
|
|
||||||
const searchTerm = query.slice(5).trim()
|
const searchTerm = query.slice(5).trim()
|
||||||
|
|
||||||
ClipboardService.history.forEach(function (clip, index) {
|
ClipboardService.history.forEach(function (clip, index) {
|
||||||
|
|
@ -184,6 +188,38 @@ NLoader {
|
||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle direct math expressions after ">"
|
||||||
|
if (query.startsWith(">") && query.length > 1 && !query.startsWith(">clip") && !query.startsWith(">calc")) {
|
||||||
|
var mathExpr = query.slice(1).trim()
|
||||||
|
// Check if it looks like a math expression (contains numbers and math operators)
|
||||||
|
if (mathExpr && /[0-9+\-*/().]/.test(mathExpr)) {
|
||||||
|
try {
|
||||||
|
var sanitizedExpr = mathExpr.replace(/[^0-9+\-*/().\s]/g, '')
|
||||||
|
var result = eval(sanitizedExpr)
|
||||||
|
|
||||||
|
if (isFinite(result) && !isNaN(result)) {
|
||||||
|
var displayResult = Number.isInteger(result) ? result.toString() : result.toFixed(6).replace(/\.?0+$/, '')
|
||||||
|
results.push({
|
||||||
|
"isCalculator": true,
|
||||||
|
"name": `${mathExpr} = ${displayResult}`,
|
||||||
|
"result": result,
|
||||||
|
"expr": mathExpr,
|
||||||
|
"icon": "tag",
|
||||||
|
"execute": function () {
|
||||||
|
Quickshell.clipboardText = displayResult
|
||||||
|
copyText(displayResult)
|
||||||
|
Quickshell.execDetached(
|
||||||
|
["notify-send", "Calculator", `${mathExpr} = ${displayResult} (copied to clipboard)`])
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return results
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
// If math evaluation fails, fall through to regular search
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Handle calculator
|
// Handle calculator
|
||||||
if (query.startsWith(">calc")) {
|
if (query.startsWith(">calc")) {
|
||||||
var expr = searchText.slice(5).trim()
|
var expr = searchText.slice(5).trim()
|
||||||
|
|
@ -201,7 +237,7 @@ NLoader {
|
||||||
"name": `${expr} = ${displayResult}`,
|
"name": `${expr} = ${displayResult}`,
|
||||||
"result": result,
|
"result": result,
|
||||||
"expr": expr,
|
"expr": expr,
|
||||||
"icon": "calculate",
|
"icon": "tag",
|
||||||
"execute": function () {
|
"execute": function () {
|
||||||
Quickshell.clipboardText = displayResult
|
Quickshell.clipboardText = displayResult
|
||||||
copyText(displayResult)
|
copyText(displayResult)
|
||||||
|
|
@ -214,7 +250,7 @@ NLoader {
|
||||||
"isCalculator": true,
|
"isCalculator": true,
|
||||||
"name": "Invalid expression",
|
"name": "Invalid expression",
|
||||||
"content": "Please enter a valid mathematical expression",
|
"content": "Please enter a valid mathematical expression",
|
||||||
"icon": "calculate",
|
"icon": "tag",
|
||||||
"execute": function () {}
|
"execute": function () {}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -223,7 +259,7 @@ NLoader {
|
||||||
"isCalculator": true,
|
"isCalculator": true,
|
||||||
"name": "Invalid expression",
|
"name": "Invalid expression",
|
||||||
"content": "Please enter a valid mathematical expression",
|
"content": "Please enter a valid mathematical expression",
|
||||||
"icon": "calculate",
|
"icon": "tag",
|
||||||
"execute": function () {}
|
"execute": function () {}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -233,7 +269,7 @@ NLoader {
|
||||||
"isCalculator": true,
|
"isCalculator": true,
|
||||||
"name": "Calculator",
|
"name": "Calculator",
|
||||||
"content": "Enter a mathematical expression (e.g., 5+5, 2*3, 10/2)",
|
"content": "Enter a mathematical expression (e.g., 5+5, 2*3, 10/2)",
|
||||||
"icon": "calculate",
|
"icon": "tag",
|
||||||
"execute": function () {}
|
"execute": function () {}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -449,7 +485,7 @@ NLoader {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
anchors.margins: Style.marginXS * scaling
|
anchors.margins: Style.marginXS * scaling
|
||||||
asynchronous: true
|
asynchronous: true
|
||||||
source: modelData.isCalculator ? "calculate" : modelData.isClipboard ? (modelData.type === 'image' ? "" : "content_paste") : modelData.isCommand ? modelData.icon : (modelData.icon ? Quickshell.iconPath(modelData.icon, "application-x-executable") : "")
|
source: modelData.isCalculator ? "" : modelData.isClipboard ? "" : modelData.isCommand ? modelData.icon : (modelData.icon ? Quickshell.iconPath(modelData.icon, "application-x-executable") : "")
|
||||||
visible: (modelData.isCalculator || modelData.isClipboard || modelData.isCommand
|
visible: (modelData.isCalculator || modelData.isClipboard || modelData.isCommand
|
||||||
|| parent.iconLoaded) && modelData.type !== 'image'
|
|| parent.iconLoaded) && modelData.type !== 'image'
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue