2021-05-15 18:06:46 +00:00
|
|
|
#!/usr/bin/env sh
|
|
|
|
|
|
|
|
# Description: Add selection or hovered file/directory to cmus queue
|
|
|
|
#
|
|
|
|
# Dependencies: cmus, pgrep, xdotool (optional)
|
|
|
|
#
|
|
|
|
# Notes:
|
|
|
|
# 1. If adding selection, files/dirs are added in the same order they were selected in nnn
|
|
|
|
# 2. A new window will be opened if cmus is not running already, playback will start immediately
|
|
|
|
# 3. If cmus is already running, files will be appended to the queue with no forced playback
|
|
|
|
#
|
|
|
|
# TODO:
|
|
|
|
# 1. Add cava and cmus-lyrics as optional dependencies
|
|
|
|
# 2. Start cava and/or cmus-lyrics in tmux or kitty panes next to cmus
|
|
|
|
#
|
|
|
|
# Shell: POSIX compliant
|
|
|
|
# Author: Kabouik
|
|
|
|
|
|
|
|
# (Optional) Set preferred terminal emulator for cmus if not set in your env,
|
|
|
|
# or leave commented out to use OS default
|
|
|
|
#TERMINAL="kitty"
|
|
|
|
|
|
|
|
if ! type cmus >/dev/null; then
|
|
|
|
printf "cmus missing"
|
|
|
|
read -r _
|
2021-05-16 21:39:10 +00:00
|
|
|
exit 1
|
2021-05-15 18:06:46 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
|
|
|
|
|
|
|
|
start_cmus() {
|
|
|
|
type xdotool >/dev/null && nnnwindow="$(xdotool getactivewindow)"
|
|
|
|
case "$TERMINAL" in
|
|
|
|
kitty | gnome-terminal | st)
|
|
|
|
nohup "$TERMINAL" -- cmus & ;;
|
|
|
|
havoc)
|
|
|
|
nohup "$TERMINAL" cmus & ;;
|
|
|
|
"")
|
|
|
|
nohup x-terminal-emulator -e cmus & ;;
|
|
|
|
*)
|
|
|
|
nohup "$TERMINAL" -e cmus & ;;
|
|
|
|
esac
|
|
|
|
# Give the new terminal some time to open
|
2021-05-15 20:24:40 +00:00
|
|
|
until cmus-remote -C; do sleep 0.1; done
|
2021-05-15 18:06:46 +00:00
|
|
|
[ -n "$nnnwindow" ] && xdotool windowactivate "$nnnwindow"
|
|
|
|
} >/dev/null 2>&1
|
|
|
|
|
|
|
|
fill_queue() {
|
|
|
|
if [ "$REPLY" = "s" ]; then
|
|
|
|
xargs < "$selection" -0 cmus-remote -q
|
|
|
|
elif [ -n "$1" ]; then
|
|
|
|
cmus-remote -q "$1"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# If active selection,then ask what to do
|
|
|
|
if [ -s "$selection" ]; then
|
|
|
|
printf "Queue [s]election or [c]urrently hovered? [default=c]: "
|
|
|
|
read -r REPLY
|
|
|
|
fi
|
|
|
|
|
|
|
|
# If cmus is not running, start and play queue
|
|
|
|
if ! pgrep cmus >/dev/null; then
|
|
|
|
printf "cmus is not running, starting it in a new %s window.\n" "$TERMINAL"
|
|
|
|
start_cmus
|
|
|
|
fill_queue "$1"
|
|
|
|
cmus-remote -p
|
|
|
|
printf "Files added to cmus queue.\n"
|
|
|
|
else # Append to existing queue if cmus is already running
|
|
|
|
fill_queue "$1"
|
|
|
|
printf "Files appended to current cmus queue.\n"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Change view
|
|
|
|
cmus-remote -C "view 4"
|
|
|
|
|
|
|
|
# Clear selection
|
|
|
|
if [ -p "$NNN_PIPE" ]; then
|
|
|
|
printf "-" > "$NNN_PIPE"
|
|
|
|
fi
|