scripts/bin/dmpc
Alexander Gehrke cefd40b6dc Initial commit
2019-09-30 14:49:14 +02:00

92 lines
1.9 KiB
Bash
Executable file

#!/bin/zsh
dmenu_opts=("" "-i")
replace=("-r")
zparseopts -E -D -K -help=help \
a=artist -artist=artist \
b=album -album=album \
t=title -title=title \
j=jump -jump=jump \
r=replace -replace=replace R=replace -no-replace=replace \
o:=dmenu_opts -dmenu-opts:=dmenu_opts \
h:=host -host:=host \
p:=port -port:=port
if [ -n "$help" ]; then
<<-HELP
dmpc: manage mpd playlist with dmenu
Usage: dmpc {-a|-b|-t|-j} [OPTION]
Options:
-a, --artist search for artist
-b, --album search for album
-t, --title search for title
-j, --jump jump to song in current playlist (requires rofi)
(if given in addition to searches, jumps after changes)
-r, --replace replace current playlist
-R, --no-replace do not replace current playlist
-o, --dmenu-opts additional options for dmenu
-h, --host MPD host server
-p, --port server port
dmpc lets you select all tracks from an artist or album or a single track.
HELP
exit 0
fi
if [[ -z "$artist" && -z "$album" && -z "$title" ]]; then
<<-ERR
At least one of -a, -b, -t or -j must be given. See --help for more information.
ERR
exit 1
fi
typeset -a queries
mpc_() {
mpc $=host $=port "$@"
}
dmenu_search() {
local type=$1
mpc_ list $type "${queries[@]}" | dmenu ${=dmenu_opts[2]}
}
add_query() {
local type=$1
local query=$2
queries+=$type
queries+=$query
}
if [[ -n $artist ]]; then
add_query albumartist "$(dmenu_search artist)"
fi
if [[ -n $album ]]; then
add_query album "$(dmenu_search album)"
fi
if [[ -n $title ]]; then
add_query title "$(dmenu_search title)"
fi
if [[ ${replace[1]} == "-r" || "${replace[1]}" == "--replace" ]]; then
mpc_ clear
fi
if [[ ${#queries} -gt 0 ]]; then
mpc_ search "${queries[@]}" | mpc_ add
mpc_ play
fi
if [[ -n $jump ]]; then
mpc play "$(mpc playlist | rofi -dmenu -format d)"
fi