From f56f8c250cd3c8bc892c75a15b3eebeeca69a187 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Fri, 10 May 2024 23:31:39 +0700 Subject: [PATCH] icons: add regex substitutions (#487) --- .../modules/.configuration/user_options.js | 8 ++++++- .config/ags/modules/.miscutils/icons.js | 21 ++++++++++++++++--- .config/ags/modules/dock/dock.js | 20 +----------------- .../ags/modules/overview/overview_hyprland.js | 4 ++-- 4 files changed, 28 insertions(+), 25 deletions(-) diff --git a/.config/ags/modules/.configuration/user_options.js b/.config/ags/modules/.configuration/user_options.js index 0042a574..e17e98b2 100644 --- a/.config/ags/modules/.configuration/user_options.js +++ b/.config/ags/modules/.configuration/user_options.js @@ -125,7 +125,13 @@ let configOptions = { 'wps': "wps-office2019-kprometheus", 'wpsoffice': "wps-office2019-kprometheus", '': "image-missing", - } + }, + regexSubstitutions: [ + { + regex: /^steam_app_(\d+)$/, + replace: "steam_icon_$1", + } + ] }, 'keybinds': { // Format: Mod1+Mod2+key. CaSe SeNsItIvE! diff --git a/.config/ags/modules/.miscutils/icons.js b/.config/ags/modules/.miscutils/icons.js index fb1e20da..66c09eda 100644 --- a/.config/ags/modules/.miscutils/icons.js +++ b/.config/ags/modules/.miscutils/icons.js @@ -6,8 +6,23 @@ export function iconExists(iconName) { } export function substitute(str) { - if(userOptions.icons.substitutions[str]) return userOptions.icons.substitutions[str]; + // Normal substitutions + if (userOptions.icons.substitutions[str]) + return userOptions.icons.substitutions[str]; - if (!iconExists(str)) str = str.toLowerCase().replace(/\s+/g, '-'); // Turn into kebab-case + // Regex substitutions + for (let i = 0; i < userOptions.icons.regexSubstitutions.length; i++) { + const substitution = userOptions.icons.regexSubstitutions[i]; + const replacedName = str.replace( + substitution.regex, + substitution.replace, + ); + if (replacedName != str) return replacedName; + } + + // Guess: convert to kebab case + if (!iconExists(str)) str = str.toLowerCase().replace(/\s+/g, "-"); + + // Original string return str; -} \ No newline at end of file +} diff --git a/.config/ags/modules/dock/dock.js b/.config/ags/modules/dock/dock.js index 789ddae2..8e318410 100755 --- a/.config/ags/modules/dock/dock.js +++ b/.config/ags/modules/dock/dock.js @@ -11,6 +11,7 @@ const { Box, Revealer } = Widget; import { setupCursorHover } from '../.widgetutils/cursorhover.js'; import { getAllFiles, searchIcons } from './icons.js' import { MaterialIcon } from '../.commonwidgets/materialicon.js'; +import { substitute } from '../.miscutils/icons.js'; const icon_files = userOptions.icons.searchPaths.map(e => getAllFiles(e)).flat(1) @@ -24,25 +25,6 @@ function clearTimes() { timers = [] } -function substitute(str) { - const subs = [ - { from: 'code-url-handler', to: 'visual-studio-code' }, - { from: 'Code', to: 'visual-studio-code' }, - { from: 'GitHub Desktop', to: 'github-desktop' }, - { from: 'wps', to: 'wps-office2019-kprometheus' }, - { from: 'gnome-tweaks', to: 'org.gnome.tweaks' }, - { from: 'Minecraft* 1.20.1', to: 'minecraft' }, - { from: '', to: 'image-missing' }, - ]; - - for (const { from, to } of subs) { - if (from === str) - return to; - } - - return str; -} - function ExclusiveWindow(client) { const fn = [ (client) => !(client !== null && client !== undefined), diff --git a/.config/ags/modules/overview/overview_hyprland.js b/.config/ags/modules/overview/overview_hyprland.js index 7f3e593b..d7c23de9 100644 --- a/.config/ags/modules/overview/overview_hyprland.js +++ b/.config/ags/modules/overview/overview_hyprland.js @@ -67,7 +67,7 @@ export default (overviewMonitor = 0) => { const iconName = substitute(c); const appIcon = iconExists(iconName) ? Widget.Icon({ - icon: substitute(c), + icon: iconName, size: Math.min(w, h) * userOptions.overview.scale / 2.5, }) : MaterialIcon('terminal', 'gigantic', { css: `font-size: ${Math.min(w, h) * userOptions.overview.scale / 2.5}px`, @@ -424,4 +424,4 @@ export default (overviewMonitor = 0) => { ) }), }); -} \ No newline at end of file +}