#!/usr/bin/env sh WIN=$(xdotool getwindowfocus) programchoicesinit() { XPROPOUT="$(xprop -id $(xdotool getactivewindow))" WMCLASS="${1:-$(echo "$XPROPOUT" | grep WM_CLASS | cut -d ' ' -f3-)}" # Default system menu (no matches) CHOICES="$(echo " $( [ -n "$(ls -A $XDG_CONFIG_HOME/sxmo/userscripts)" ] && echo 'Userscripts ^ 0 ^ sxmo_appmenu.sh userscripts' ) Scripts ^ 0 ^ sxmo_appmenu.sh scripts Apps ^ 0 ^ sxmo_appmenu.sh applications Volume ↑ ^ 1 ^ sxmo_vol.sh up Volume ↓ ^ 1 ^ sxmo_vol.sh down Dialer ^ 0 ^ sxmo_modemcall.sh dial Texts ^ 0 ^ sxmo_modemtext.sh Camera ^ 0 ^ sxmo_camera.sh Wifi ^ 0 ^ st -e "nmtui" Audio ^ 0 ^ sxmo_appmenu.sh audioout Config ^ 0 ^ sxmo_appmenu.sh config Logout ^ 0 ^ pkill -9 dwm ")" && WINNAME=Sys # Userscripts menu echo $WMCLASS | grep -i "userscripts" && CHOICES="$( ls -1 $XDG_CONFIG_HOME/sxmo/userscripts | sed 's/ /\\ /' | awk '{printf "%s\t^ 0 ^ $XDG_CONFIG_HOME/sxmo/userscripts/%s \n", $0, $0}' )" && WINNAME=Userscripts && return # Scripts menu echo $WMCLASS | grep -i "scripts" && CHOICES="$(echo " Web Search ^ 0 ^ sxmo_websearch.sh Files ^ 0 ^ sxmo_files.sh Record ^ 0 ^ sxmo_record.sh Timer ^ 0 ^ sxmo_timer.sh Youtube ^ 0 ^ sxmo_youtube.sh video Youtube (Audio) ^ 0 ^ sxmo_youtube.sh audio Weather ^ 0 ^ sxmo_weather.sh RSS ^ 0 ^ sxmo_rss.sh ")" && WINNAME=Scripts && return # Apps menu echo $WMCLASS | grep -i "applications" && CHOICES="$(echo " Surf ^ 0 ^ surf Netsurf ^ 0 ^ netsurf Firefox ^ 0 ^ firefox Sacc ^ 0 ^ st -e sacc i-logout.cz/1/bongusta W3m ^ 0 ^ st -e w3m duck.com Xcalc ^ 0 ^ xcalc St ^ 0 ^ st Foxtrotgps ^ 0 ^ foxtrotgps ")" && WINNAME=Apps && return # System Control menu echo $WMCLASS | grep -i "config" && CHOICES="$(echo " Brightesss ↑ ^ 1 ^ sxmo_brightness.sh up Brightness ↓ ^ 1 ^ sxmo_brightness.sh down Modem Toggle ^ 1 ^ sxmo_modemmonitortoggle.sh Modem Info ^ 0 ^ sxmo_modeminfo.sh Modem Log ^ 0 ^ sxmo_modemlog.sh Flash $( cat /sys/class/leds/white:flash/brightness | grep -E '^0$' > /dev/null && echo -n "Off → On" || echo -n "On → Off"; echo -n "^ 1 ^ sxmo_flashtoggle.sh" ) Bar Toggle ^ 1 ^ key Alt+b Change Timezone ^ 1 ^ sxmo_timezonechange.sh Rotate ^ 1 ^ sxmo_rotate.sh Upgrade Pkgs ^ 0 ^ st -e sxmo_upgrade.sh ")" && WINNAME=Config && return # Audio Out menu echo $WMCLASS | grep -i "audioout" && CURRENTDEV="$(sxmo_audiocurrentdevice.sh)" && CHOICES="$(echo " Headphones $([[ "$CURRENTDEV" == "Headphone" ]] && echo "✓") ^ 1 ^ sxmo_audioout.sh Headphones Speaker $([[ "$CURRENTDEV" == "Line Out" ]] && echo "✓") ^ 1 ^ sxmo_audioout.sh Speaker Earpiece $([[ "$CURRENTDEV" == "Earpiece" ]] && echo "✓") ^ 1 ^ sxmo_audioout.sh Earpiece None $([[ "$CURRENTDEV" == "None" ]] && echo "✓") ^ 1 ^ sxmo_audioout.sh None ")" && WINNAME="Audio" && return # MPV echo $WMCLASS | grep -i "mpv" && CHOICES="$(echo " Pause ^ 0 ^ key space Seek ← ^ 1 ^ key Left Seek → ^ 1 ^ key Right App Volume ↑ ^ 1 ^ key 0 App Volume ↓ ^ 1 ^ key 9 Speed ↑ ^ 1 ^ key bracketright Speed ↓ ^ 1 ^ key bracketleft Screenshot ^ 1 ^ key s Loopmark ^ 1 ^ key l Info ^ 1 ^ key i Seek Info ^ 1 ^ key o ")" && WINNAME=Mpv && return # St echo $WMCLASS | grep -i "st-256color" && STSELMODEON="$(echo "$XPROPOUT" | grep -E '^_ST_SELMODE.+=' | cut -d= -f2 | tr -d ' ')" && CHOICES="$(echo " Type complete ^ 0 ^ key Ctrl+Shift+u Copy complete ^ 0 ^ key Ctrl+Shift+i Selmode $( [ $STSELMODEON == 1 ] && printf %b 'On → Off' || printf %b 'Off → On'; printf %b '^ 0 ^ key Ctrl+Shift+s' ) $([ $STSELMODEON == 1 ] && echo 'Copy selection ^ 0 ^ key Ctrl+Shift+c') Paste ^ 0 ^ key Ctrl+Shift+v Zoom + ^ 1 ^ key Ctrl+Shift+Prior Zoom - ^ 1 ^ key Ctrl+Shift+Next Scroll ↑ ^ 1 ^ key Ctrl+Shift+b Scroll ↓ ^ 1 ^ key Ctrl+Shift+f Invert ^ 1 ^ key Ctrl+Shift+x Hotkeys ^ 0 ^ sxmo_appmenu.sh sthotkeys ")" && WINNAME=St && return # St hotkeys echo $WMCLASS | grep -i "sthotkeys" && CHOICES="$(echo " Send Ctrl-C ^ 0 ^ key Ctrl+c Send Ctrl-L ^ 0 ^ key Ctrl+l Send Ctrl-D ^ 0 ^ key Ctrl+d ")" && WINNAME=St && return # Netsurf echo $WMCLASS | grep -i netsurf && CHOICES="$(echo " Pipe URL ^ 0 ^ sxmo_urlhandler.sh Zoom + ^ 1 ^ key Ctrl+plus Zoom - ^ 1 ^ key Ctrl+minus History ← ^ 1 ^ key Alt+Left History → ^ 1 ^ key Alt+Right ")" && WINNAME=Netsurf && return # Surf echo $WMCLASS | grep surf && CHOICES="$(echo " Navigate ^ 0 ^ key Ctrl+g Link Menu ^ 0 ^ key Ctrl+d Pipe URL ^ 0 ^ sxmo_urlhandler.sh Zoom + ^ 1 ^ key Ctrl+Shift+k Zoom - ^ 1 ^ key Ctrl+Shift+j Scroll ↑ ^ 1 ^ key Shift+space Scroll ↓ ^ 1 ^ key space JS Toggle ^ 1 ^ key Ctrl+Shift+s History ← ^ 1 ^ key Ctrl+h History → ^ 1 ^ key Ctrl+l ")" && WINNAME=Surf && return # Firefox echo $WMCLASS | grep -i firefox && CHOICES="$(echo " Pipe URL ^ 0 ^ sxmo_urlhandler.sh Zoom + ^ 1 ^ key Ctrl+plus Zoom - ^ 1 ^ key Ctrl+minus History ← ^ 1 ^ key Alt+Left History → ^ 1 ^ key Alt+Right ")" && WINNAME=Firefox && return # Foxtrot GPS echo $WMCLASS | grep -i foxtrot && CHOICES="$(echo " Zoom + ^ 1 ^ key i Zoom - ^ 1 ^ key o Panel toggle ^ 1 ^ key m Autocenter toggle ^ 0 ^ key a Route ^ 0 ^ key r ")" && WINNAME=Gps && return } getprogchoices() { # E.g. sets CHOICES var programchoicesinit $@ # Decorate menu at top w/ incoming call entry if present INCOMINGCALL=$(cat /tmp/sxmo_incomingcall || echo NOCALL) echo "$INCOMINGCALL" | grep -v NOCALL && CHOICES="$(echo " Pickup $(echo $INCOMINGCALL | cut -d: -f2) ^ 0 ^ sxmo_modemcall.sh pickup $(echo $INCOMINGCALL | cut -d: -f1) $CHOICES ")" # Decorate menu at bottom w/ system menu entry if not system menu echo $WINNAME | grep -v Sys && CHOICES=" $CHOICES System Menu ^ 0 ^ sxmo_appmenu.sh sys " # Decorate menu at bottom w/ close menu entry CHOICES=" $CHOICES Close Menu ^ 0 ^ quit " PROGCHOICES="$(echo "$CHOICES" | xargs -0 echo | sed '/^[[:space:]]*$/d' | awk '{$1=$1};1')" } key() { xdotool windowactivate "$WIN" xdotool key --clearmodifiers "$1" #--window $WIN } quit() { exit 0 } mainloop() { DMENUIDX=0 PICKED="" ARGS="$@" while : do # E.g. sets PROGCHOICES getprogchoices $ARGS PICKED="$( echo "$PROGCHOICES" | cut -d'^' -f1 | dmenu -idx $DMENUIDX -l 14 -c -fn "Terminus-30" -p "$WINNAME" )" LOOP="$(echo "$PROGCHOICES" | grep -F "$PICKED" | cut -d '^' -f2)" CMD="$(echo "$PROGCHOICES" | grep -F "$PICKED" | cut -d '^' -f3)" DMENUIDX="$(echo "$PROGCHOICES" | grep -F -n "$PICKED" | cut -d ':' -f1)" echo "Eval: <$CMD> from picked <$PICKED> with loop <$LOOP>" eval $CMD echo $LOOP | grep 1 || quit done } pgrep -f sxmo_appmenu.sh | grep -Ev "^${$}$" | xargs kill -9 pkill -9 dmenu mainloop $@