On a PinePhone, this function took ~90 ms before the change and ~45 ms
after.
---
scripts/core/sxmo_appmenu.sh | 55 +++++++++++++++++++++++-------------
1 file changed, 36 insertions(+), 19 deletions(-)
diff --git a/scripts/core/sxmo_appmenu.sh b/scripts/core/sxmo_appmenu.sh
index b31c2aa..154415c 100755
--- a/scripts/core/sxmo_appmenu.sh
@@ -14,14 +14,15 @@ gracefulexit() {
programchoicesinit() {
XPROPOUT="$(xprop -id "$(xdotool getactivewindow)")"
- WMCLASS="${1:-$(echo "$XPROPOUT" | grep WM_CLASS | cut -d ' ' -f3-)}"
+ WMCLASS="${1:-$(echo "$XPROPOUT" | grep WM_CLASS | cut -d ' ' -f3- | tr '[:upper:]' '[:lower:]')}"
if [ -z "$XPROPOUT" ]; then
echo "sxmo_appmenu: detected no active window, no problem, opening system menu" >&2
else
echo "sxmo_appmenu: opening menu for wmclass $WMCLASS" >&2
fi
- if echo "$WMCLASS" | grep -i "scripts"; then
+ case "$WMCLASS" in
+ scripts )
# Scripts menu
CHOICES="
$icon_mic Record ^ 0 ^ sxmo_record.sh
@@ -46,8 +47,9 @@ programchoicesinit() {
"
fi
WINNAME=Scripts
- elif echo "$WMCLASS" | grep -i "applications"; then
- # Apps menu
+ ;;
+ applications )
+ # Apps menu
if [ -x "$XDG_CONFIG_HOME/sxmo/hooks/apps" ]; then
CHOICES=$("$XDG_CONFIG_HOME/sxmo/hooks/apps")
else
@@ -117,7 +119,8 @@ programchoicesinit() {
"
fi
WINNAME=Apps
- elif echo "$WMCLASS" | grep -i "config"; then
+ ;;
+ config )
# System Control menu
CHOICES="
$icon_aru Brightness ^ 1 ^ sxmo_brightness.sh up
@@ -146,7 +149,8 @@ programchoicesinit() {
$icon_cfg Edit configuration ^ 0 ^ st -e $EDITOR $XDG_CONFIG_HOME/sxmo/xinit
"
WINNAME=Config
- elif echo "$WMCLASS" | grep -i "audioout"; then
+ ;;
+ audioout )
# Audio Out menu
CURRENTDEV="$(sxmo_audiocurrentdevice.sh)"
CHOICES="
@@ -158,7 +162,8 @@ programchoicesinit() {
$icon_ard Volume down ^ 1 ^ sxmo_vol.sh down
"
WINNAME="Audio"
- elif echo "$WMCLASS" | grep -i "power"; then
+ ;;
+ power )
# Power menu
CHOICES="
$icon_lck Lock ^ 0 ^ sxmo_lock.sh
@@ -169,7 +174,8 @@ programchoicesinit() {
$icon_pwr Poweroff ^ 0 ^ st -e sudo poweroff
"
WINNAME="Power"
- elif echo "$WMCLASS" | grep -i "mpv"; then
+ ;;
+ *mpv* )
# MPV
CHOICES="
$icon_pau Pause ^ 0 ^ key space
@@ -185,7 +191,8 @@ programchoicesinit() {
$icon_inf Seek Info ^ 1 ^ key o
"
WINNAME=Mpv && return
- elif echo "$WMCLASS" | grep -i "feh"; then
+ ;;
+ *feh* )
# Feh
CHOICES="
$icon_arr Next ^ 1 ^ key space
@@ -201,7 +208,8 @@ programchoicesinit() {
$icon_inf Toggle filename ^ 1 ^ key d
"
WINNAME=Feh && return
- elif echo "$WMCLASS" | grep -i "sxiv"; then
+ ;;
+ *sxiv* )
# Sxiv
CHOICES="
$icon_arr Next ^ 1 ^ key space
@@ -215,7 +223,8 @@ programchoicesinit() {
$icon_grd Thumbnail ^ 0 ^ key Return
"
WINNAME=Sxiv && return
- elif echo "$WMCLASS" | grep -i "st-256color"; then
+ ;;
+ *st-256color* )
# St
# First we try to handle the app running inside st:
WMNAME="${1:-$(echo "$XPROPOUT" | grep -E "^WM_NAME" | cut -d ' ' -f3-)}"
@@ -355,7 +364,8 @@ programchoicesinit() {
"
WINNAME=St
fi
- elif echo "$WMCLASS" | grep -i "sthotkeys"; then
+ ;;
+ *sthotkeys* )
# St hotkeys
CHOICES="
Send Ctrl-C ^ 0 ^ key Ctrl+c
@@ -366,7 +376,8 @@ programchoicesinit() {
Send Ctrl-B ^ 0 ^ key Ctrl+b
"
WINNAME=St
- elif echo "$WMCLASS" | grep -i netsurf; then
+ ;;
+ *netsurf* )
# Netsurf
CHOICES="
$icon_flt Pipe URL ^ 0 ^ sxmo_urlhandler.sh
@@ -376,7 +387,8 @@ programchoicesinit() {
$icon_arr History ^ 1 ^ key Alt+Right
"
WINNAME=Netsurf
- elif echo "$WMCLASS" | grep surf; then
+ ;;
+ *surf* )
# Surf
CHOICES="
$icon_glb Navigate ^ 0 ^ key Ctrl+g
@@ -394,7 +406,8 @@ programchoicesinit() {
$icon_rld Refresh ^ 0 ^ key Ctrl+Shift+r
"
WINNAME=Surf
- elif echo "$WMCLASS" | grep -i firefox; then
+ ;;
+ *firefox* )
# Firefox
CHOICES="
$icon_flt Pipe URL ^ 0 ^ sxmo_urlhandler.sh
@@ -407,7 +420,8 @@ programchoicesinit() {
$icon_rld Refresh ^ 0 ^ key Ctrl+Shift+r
"
WINNAME=Firefox
- elif echo "$WMCLASS" | grep -i lagrange; then
+ ;;
+ *lagrange* )
# Lagrange
CHOICES="
$icon_mnu Toggle sidebar ^ 0 ^ key Ctrl+Shift+p
@@ -421,7 +435,8 @@ programchoicesinit() {
$icon_rld Refresh ^ 0 ^ key Ctrl+r
"
WINNAME=Lagrange
- elif echo "$WMCLASS" | grep -i foxtrot; then
+ ;;
+ *foxtrot* )
# Foxtrot GPS
CHOICES="
$icon_itm Locations ^ 0 ^ sxmo_gpsutil.sh menulocations
@@ -438,7 +453,8 @@ programchoicesinit() {
$icon_usr Locate Me ^ 0 ^ sxmo_gpsutil.sh gpsgeoclueset
"
WINNAME=Maps
- else
+ ;;
+ * )
# Default system menu (no matches)
CHOICES="
$icon_grd Scripts ^ 0 ^ sxmo_appmenu.sh scripts
@@ -456,7 +472,8 @@ programchoicesinit() {
$icon_pwr Power ^ 0 ^ sxmo_appmenu.sh power
"
WINNAME=Sys
- fi
+ ;;
+ esac
}
getprogchoices() {
--
2.31.1