I recently modified one of adi1090x's rofi scripts to fit singular rofi theme, and I can't seem to find out why it isn't working. The entire code is listed below:
#!/usr/bin/env bash
## Music Player Controls
# Import Current Theme
dir="~/.config/polybar/cuts/scripts/rofi"
theme="$dir/mpd.rasi"
# Elements
status="`mpc status`"
if [[ -z "$status" ]]; then
prompt='Offline'
mesg="MPD is Offline"
else
prompt="`mpc -f "%artist%" current`"
mesg="`mpc -f "%title%" current` :: `mpc status | grep "#" | awk '{print $3}'`"
fi
if [[ ${status} == *"[playing]"* ]]; then
option_1=" Pause"
else
option_1=" Play"
fi
option_2=" Stop"
option_3=" Previous"
option_4=" Next"
option_5=" Repeat"
option_6=" Random"
# Toggle Actions
active=''
urgent=''
# Repeat
if [[ ${status} == *"repeat: on"* ]]; then
active="-a 4"
elif [[ ${status} == *"repeat: off"* ]]; then
urgent="-u 4"
else
option_5=" Parsing Error"
fi
# Random
if [[ ${status} == *"random: on"* ]]; then
[ -n "$active" ] && active =",5" || active="-a 5"
elif [[ ${status} == *"random: off"* ]]; then
[ -n "$urgent" ] && urgent =",5" || urgent="-u 5"
else
option_6=" Parsing Error"
fi
#Finally, the actual command.
rofi_cmd() {
rofi \
-dmenu \
-p "$prompt" \
-mesg "$mesg" \
${active} ${urgent} \
-markup-rows \
-theme "$theme" \
}
# Pass variables to rofi dmenu
run_rofi() {
echo -e "$option_1\n$option_2\n$option_3\n$option_4\n$option_5\n$option_6" | rofi_cmd
}
# Execute Command
run_cmd() {
if [[ "$1" == '--opt1' ]]; then
mpc -q toggle && notify-send -u low -t 1000 " `mpc current`"
elif [[ "$1" == '--opt2' ]]; then
mpc -q stop
elif [[ "$1" == '--opt3' ]]; then
mpc -q prev && notify-send -u low -t 1000 " `mpc current`"
elif [[ "$1" == '--opt4' ]]; then
mpc -q next && notify-send -u low -t 1000 " `mpc current`"
elif [[ "$1" == '--opt5' ]]; then
mpc -q repeat
elif [[ "$1" == '--opt6' ]]; then
mpc -q random
fi
}
# Actions
chosen="$(run_rofi)"
case ${chosen} in
$option_1)
run_cmd --opt1
;;
$option_2)
run_cmd --opt2
;;
$option_3)
run_cmd --opt3
;;
$option_4)
run_cmd --opt4
;;
$option_5)
run_cmd --opt5
;;
$option_6)
run_cmd --opt6
;;
esac
When ran it displays /home/chaossys/.config/polybar/cuts/scripts/mpd.sh: line 107: syntax error: unexpected end of file
which as far as I'm aware means there's a missing bracket and/or quote end, or missing fi, but i can't seem to find it.
Any and all help is appreciated.
CodePudding user response:
Rici, while ultimately not providing the correct answer, helped me discover that I had accidentally escaped a close-brace, which caused it to not see the pair properly. A simple deletion of the "" in line 60 allowed the script to work.
Thank you for the site Rici, I'll be sure to use that more often, since it let me know that the "}" in line 61 was treated as literal.
CodePudding user response:
If you use https://shellcheck.net (as recommended in the bash tag summary), you'll get the following:
Line 53:
rofi_cmd() {
^-- SC1009 (info): The mentioned syntax error was in this function.
^-- SC1073 (error): Couldn't parse this brace group. Fix to allow more checks.
Line 61:
}
^-- SC1083 (warning): This } is literal. Check expression (missing ;/\n?) or quote it.
Line 106:
esac
^-- SC1056 (error): Expected a '}'. If you have one, try a ; or \n in front of it.
^-- SC1072 (error): Missing '}'. Fix any mentioned problems and try again.
In the actual shellcheck output, the error numbers are linked to useful explanatory text, which you might want to consult.