From 7656113e590216acf138b390ca9d2c95f6b884c8 Mon Sep 17 00:00:00 2001 From: Myryk Date: Thu, 6 Jun 2024 03:31:22 +0200 Subject: [PATCH] added NoResultButton for search --- .config/ags/modules/overview/searchbuttons.js | 9 +++++ .config/ags/modules/overview/windowcontent.js | 36 ++++++++++++------- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/.config/ags/modules/overview/searchbuttons.js b/.config/ags/modules/overview/searchbuttons.js index 69bbaab0..58f51607 100644 --- a/.config/ags/modules/overview/searchbuttons.js +++ b/.config/ags/modules/overview/searchbuttons.js @@ -7,6 +7,15 @@ import { searchItem } from './searchitem.js'; import { execAndClose, couldBeMath, launchCustomCommand } from './miscfunctions.js'; import GeminiService from '../../services/gemini.js'; +export const NoResultButton = () => searchItem({ + materialIconName: 'Error', + name: "Search invalid", + content: "No results found!", + onActivate: () => { + App.closeWindow('overview'); + }, +}); + export const DirectoryButton = ({ parentPath, name, type, icon }) => { const actionText = Widget.Revealer({ revealChild: false, diff --git a/.config/ags/modules/overview/windowcontent.js b/.config/ags/modules/overview/windowcontent.js index 2f50a690..564df935 100644 --- a/.config/ags/modules/overview/windowcontent.js +++ b/.config/ags/modules/overview/windowcontent.js @@ -8,7 +8,7 @@ const { execAsync, exec } = Utils; import { execAndClose, expandTilde, hasUnterminatedBackslash, couldBeMath, launchCustomCommand, ls } from './miscfunctions.js'; import { CalculationResultButton, CustomCommandButton, DirectoryButton, - DesktopEntryButton, ExecuteCommandButton, SearchButton, AiButton + DesktopEntryButton, ExecuteCommandButton, SearchButton, AiButton, NoResultButton, } from './searchbuttons.js'; import { checkKeybind } from '../.widgetutils/keybind.js'; import GeminiService from '../../services/gemini.js'; @@ -99,7 +99,7 @@ export const SearchAndWindows = () => { const isAction = text.startsWith('>'); const isDir = (['/', '~'].includes(entry.text[0])); - if (couldBeMath(text)) { // Eval on typing is dangerous, this is a workaround + if (userOptions.search.enableMathResults && couldBeMath(text)) { // Eval on typing is dangerous, this is a workaround try { const fullResult = eval(text.replace(/\^/g, "**")); // copy @@ -110,7 +110,7 @@ export const SearchAndWindows = () => { // console.log(e); } } - if (isDir) { + if (userOptions.search.enableDirectorySearch && isDir) { App.closeWindow('overview'); execAsync(['bash', '-c', `xdg-open "${expandTilde(text)}"`, `&`]).catch(print); return; @@ -120,24 +120,31 @@ export const SearchAndWindows = () => { _appSearchResults[0].launch(); return; } - else if (text[0] == '>') { // Custom commands + else if (userOptions.search.enableActions && text[0] == '>') { // Custom commands App.closeWindow('overview'); launchCustomCommand(text); return; } // Fallback: Execute command - if (!isAction && exec(`bash -c "command -v ${text.split(' ')[0]}"`) != '') { + if (userOptions.search.enableCommands && !isAction && exec(`bash -c "command -v ${text.split(' ')[0]}"`) != '') { if (text.startsWith('sudo')) execAndClose(text, true); else execAndClose(text, false); } - - else { + else if (userOptions.search.enableAiSearch) { GeminiService.send(text); App.closeWindow('overview'); App.openWindow('sideleft'); } + else if (userOptions.search.enableWebSearch) { + App.closeWindow('overview'); + let search = userOptions.search.engineBaseUrl + text; + for (let site of userOptions.search.excludedSites) { + if (site) search += ` -site:${site}`; + } + execAsync(['bash', '-c', `xdg-open '${search}' &`]).catch(print); + } }, onChange: (entry) => { // this is when you type const isAction = entry.text[0] == '>'; @@ -162,7 +169,7 @@ export const SearchAndWindows = () => { _appSearchResults = Applications.query(text); // Calculate - if (couldBeMath(text)) { // Eval on typing is dangerous; this is a small workaround. + if (userOptions.search.enableMathResults && couldBeMath(text)) { // Eval on typing is dangerous; this is a small workaround. try { const fullResult = eval(text.replace(/\^/g, "**")); resultsBox.add(CalculationResultButton({ result: fullResult, text: text })); @@ -170,14 +177,14 @@ export const SearchAndWindows = () => { // console.log(e); } } - if (isDir) { + if (userOptions.search.enableDirectorySearch && isDir) { var contents = []; contents = ls({ path: text, silent: true }); contents.forEach((item) => { resultsBox.add(DirectoryButton(item)); }) } - if (isAction) { // Eval on typing is dangerous, this is a workaround. + if (userOptions.search.enableActions && isAction) { // Eval on typing is dangerous, this is a workaround. resultsBox.add(CustomCommandButton({ text: entry.text })); } // Add application entries @@ -190,13 +197,16 @@ export const SearchAndWindows = () => { // Fallbacks // if the first word is an actual command - if (!isAction && !hasUnterminatedBackslash(text) && exec(`bash -c "command -v ${text.split(' ')[0]}"`) != '') { + if (userOptions.search.enableCommands && !isAction && !hasUnterminatedBackslash(text) && exec(`bash -c "command -v ${text.split(' ')[0]}"`) != '') { resultsBox.add(ExecuteCommandButton({ command: entry.text, terminal: entry.text.startsWith('sudo') })); } // Add fallback: search - resultsBox.add(AiButton({ text: entry.text })); - resultsBox.add(SearchButton({ text: entry.text })); + if (userOptions.search.enableAiSearch) + resultsBox.add(AiButton({ text: entry.text })); + if (userOptions.search.enableWebSearch) + resultsBox.add(SearchButton({ text: entry.text })); + if (resultsBox.children.length == 0) resultsBox.add(NoResultButton()); resultsBox.show_all(); }, });