1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #!/bin/bash
- all_name='[ALL]'
- mode=library
- d_artist() {
- mpc list artist | sort -f | dmenu -fn Terminus:size=17 -p artist "${dmenu_args[@]}"
- }
- d_album() {
- local artist="$1"
- local albums
- mapfile -t albums < <(mpc list album artist "$artist")
- if (( ${#albums[@]} > 1 )) ; then
- {
- printf '%s\n' "$all_name"
- printf '%s\n' "${albums[@]}" | sort -f
- } | dmenu -p album "${dmenu_args[@]}"
- else
- # We only have one album, so just use that.
- printf '%s\n' "${albums[0]}"
- fi
- }
- d_playlist() {
- local format="%position% - %title% - %album% - %artist%"
- local track
- track=$(mpc playlist -f "$format" | dmenu -p track "${dmenu_args[@]}")
- printf '%s' "${track%% *}"
- }
- i=2
- for arg do
- if [[ $arg == :: ]]; then
- dmenu_args=( "${@:$i}" )
- break
- fi
- case "$arg" in
- -l) mode=library ;;
- -p) mode=playlist ;;
- esac
- let i++
- done
- case "$mode" in
- library)
- artist=$(d_artist)
- [[ $artist ]] || exit 1
- album=$(d_album "$artist")
- [[ $album ]] || exit 2
- mpc clear
- if [[ $album == "$all_name" ]]; then
- mpc find artist "$artist" | sort | mpc add
- else
- mpc find artist "$artist" album "$album" | sort | mpc add
- fi
- mpc play >/dev/null 2>&1
- ;;
- playlist)
- mpc play "$(d_playlist)"
- ;;
- esac
|