Time of today's next appointment, or an icon for a whole-day event today or an appointment tomorrow; click lists both days, right-click opens the calcurse scratchpad. Uptime dropped and the date shortened to make room.
43 lines
1.5 KiB
Bash
Executable File
43 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
||
# Next calcurse item for xmobar: pink " 10:15 | " for an appointment later today, a cyan icon for a whole-day
|
||
# event today, a pink icon alone when the next appointment is tomorrow; empty otherwise.
|
||
# With "list": show today's and tomorrow's items in a notification (for a click on the bar)
|
||
set -uo pipefail
|
||
|
||
icon=$'\xf3\xb0\x83\xad' # nf-md-calendar, as UTF-8 bytes so the locale doesn't matter
|
||
today=$(date +%F)
|
||
|
||
query() {
|
||
calcurse -Q --filter-type cal --days 2 --output-datefmt %F "$@"
|
||
}
|
||
|
||
if [[ ${1:-} == list ]]; then
|
||
tomorrow=$(date -d tomorrow +%F)
|
||
body=$(query --format-apt '%S–%E %m\n' --format-recur-apt '%S–%E %m\n' \
|
||
--format-event 'all day %m\n' --format-recur-event 'all day %m\n' |
|
||
sed -e 's/&/\&/g; s/</\</g; s/>/\>/g' -e "s/^$today:$/Today:/; s/^$tomorrow:$/Tomorrow:/")
|
||
notify-send -a calcurse -i x-office-calendar "Calendar" "${body:-Nothing today or tomorrow}"
|
||
exit
|
||
fi
|
||
|
||
now=$(date +%s)
|
||
day="" next="" event=false
|
||
while read -r kind start; do
|
||
case $kind in
|
||
*:) day=${kind%:} ;;
|
||
A) [[ -z $next ]] && ((start > now)) && next=$start ;;
|
||
E) [[ $day == "$today" ]] && event=true ;;
|
||
esac
|
||
done < <(query --format-apt 'A %s\n' --format-recur-apt 'A %s\n' --format-event 'E\n' --format-recur-event 'E\n')
|
||
|
||
if [[ -n $next && $(date -d "@$next" +%F) == "$today" ]]; then
|
||
text="<fc=#ff79c6>$icon $(date -d "@$next" +%H:%M)</fc>"
|
||
elif $event; then
|
||
text="<fc=#8be9fd>$icon</fc>"
|
||
elif [[ -n $next ]]; then
|
||
text="<fc=#ff79c6>$icon</fc>"
|
||
else
|
||
exit 0
|
||
fi
|
||
echo "$text | "
|