Files
dotfiles/.config/xmobar/calcurse.sh
T
Daniele Fucini c103510786 xmobar: show the next calcurse appointment
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.
2026-11-12 16:03:00 +01:00

43 lines
1.5 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/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 | "