aboutsummaryrefslogtreecommitdiff
path: root/.local/bin
diff options
context:
space:
mode:
Diffstat (limited to '.local/bin')
-rwxr-xr-x.local/bin/statusbar/sb-music95
1 files changed, 30 insertions, 65 deletions
diff --git a/.local/bin/statusbar/sb-music b/.local/bin/statusbar/sb-music
index dfa36f1..f144762 100755
--- a/.local/bin/statusbar/sb-music
+++ b/.local/bin/statusbar/sb-music
@@ -1,70 +1,35 @@
#!/bin/sh
-filter() {
- artist_track=""
- status_icon=""
- modes=""
- track_info_captured=false
-
- # Read input line by line
- while IFS= read -r line; do
- # Capture the first line with artist and track name
- if [ "$track_info_captured" = false ]; then
- # Check if the line contains typical status info (e.g., "volume:") instead of artist-track
- if echo "$line" | grep -q "volume:"; then
- # No song is playing, exit with empty output
- echo ""
- return
- fi
- artist_track="$line"
- track_info_captured=true
- continue
- fi
-
- # Check for track status (paused or playing)
- if echo "$line" | grep -q "\[paused\]"; then
- status_icon=" "
- elif echo "$line" | grep -q "\[playing\]"; then
- status_icon=""
- fi
-
- # Check for modes: consume, random, repeat, single
- if echo "$line" | grep -q "consume: on"; then
- modes="${modes} "
- fi
- if echo "$line" | grep -q "random: on"; then
- modes="${modes} "
- fi
- if echo "$line" | grep -q "repeat: on"; then
- modes="${modes} "
- fi
- if echo "$line" | grep -q "single: on"; then
- modes="${modes}1 "
- fi
- done
-
- # After all lines processed, output the result only if artist_track is valid
- if [ "$track_info_captured" = true ] && [ -n "$artist_track" ]; then
- # Trim trailing space from modes if any
- modes=$(echo "$modes" | sed 's/[[:space:]]*$//')
-
- # Only add "|" if there are modes
- if [ -n "$modes" ]; then
- echo "$status_icon$artist_track | $modes"
- else
- echo "$status_icon$artist_track"
- fi
- else
- echo ""
- fi
+AWK_FILTER='
+NR==1 {
+ if ($0 ~ /volume:/) { print ""; exit }
+ artist_track = $0
+ next
+}
+NR>1 {
+ if ($0 ~ /\[paused\]/) status_icon = " "
+ if ($0 ~ /\[playing\]/) status_icon = ""
+ if ($0 ~ /consume: on/) modes = modes " "
+ if ($0 ~ /random: on/) modes = modes " "
+ if ($0 ~ /repeat: on/) modes = modes " "
+ if ($0 ~ /single: on/) modes = modes "1 "
+}
+END {
+ sub(/[[:space:]]+$/, "", modes)
+ if (artist_track) {
+ if (modes) print status_icon artist_track " | " modes
+ else print status_icon artist_track
+ } else print ""
}
+'
pidof -x sb-mpdup >/dev/null 2>&1 || sb-mpdup >/dev/null 2>&1 &
case $BLOCK_BUTTON in
- 1) mpc status | filter ; setsid -f "$TERMINAL" -e rmpc >/dev/null 2>&1 < /dev/null;; # right click, pause/unpause
- 2) mpc toggle | filter ;; # right click, pause/unpause
- 3) mpc status | filter ; notify-send " Music module" "\- Shows mpd song playing.
+ 1) mpc status | awk "$AWK_FILTER" ; setsid -f "$TERMINAL" -e rmpc >/dev/null 2>&1 < /dev/null;;
+ 2) mpc toggle | awk "$AWK_FILTER" ;;
+ 3) mpc status | awk "$AWK_FILTER" ; notify-send " Music module" "\
+- Shows mpd song playing.
-  paused.
-  consume mode.
-  shuffle mode.
@@ -72,9 +37,9 @@ case $BLOCK_BUTTON in
- 1 single mode.
- Left click opens rmpc.
- Middle click pauses.
-- Scroll changes track.";; # right click, pause/unpause
- 4) mpc prev | filter ;; # scroll up, previous
- 5) mpc next | filter ;; # scroll down, next
- 8) mpc status | filter ; setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 < /dev/null ;;
- *) mpc status | filter ;;
+- Scroll changes track.";;
+ 4) mpc prev | awk "$AWK_FILTER" ;;
+ 5) mpc next | awk "$AWK_FILTER" ;;
+ 8) mpc status | awk "$AWK_FILTER" ; setsid -f "$TERMINAL" -e "$EDITOR" "$0" >/dev/null 2>&1 < /dev/null ;;
+ *) mpc status | awk "$AWK_FILTER" ;;
esac