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.
This commit is contained in:
3 files changed
+48
-10
No files matched your search
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/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 | "
|
||||
Reference in new issue
Block a user