From 8ae4be341a5376580caa411ba5f36b6b7bbf932a Mon Sep 17 00:00:00 2001 From: Colin Date: Wed, 8 Mar 2023 02:25:57 +0000 Subject: [PATCH] sane-deadlines: allow specifying the amount of desired notice per-deadline --- pkgs/sane-scripts/src/sane-deadlines | 29 +++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/pkgs/sane-scripts/src/sane-deadlines b/pkgs/sane-scripts/src/sane-deadlines index a17665d6..ccacc770 100755 --- a/pkgs/sane-scripts/src/sane-deadlines +++ b/pkgs/sane-scripts/src/sane-deadlines @@ -3,38 +3,41 @@ # processes a tab-separated "deadlines" file and alerts for any upcoming events. # # deadlines.tsv file format: -# - \t +# - \t\t # - no header # - one line per entry # - may contain any non-newline and non-tab characters +# - is the number of days before the event to start alerting, followed by 'd', e.g. `14d` # - should be lexicographically orderable and machine-parsable, e.g. `2023-03-14` # # example `deadlines.tsv` -# 2023-03-14 celebrate pi day! -# 2023-04-18 taxes due -# 2023-04-01 the other pie day :o +# 2023-03-14 1d celebrate pi day! +# 2023-04-18 14d taxes due +# 2023-04-01 7d the other pie day :o # configurables: deadlines=~/knowledge/planner/deadlines.tsv -threshold_in_days=14 # only show events happening within this many days if ! test -f "$deadlines"; then echo "WARNING: $deadlines sane-deadlines file not found" exit 1 fi -today=$(date +%s) +now=$(date +%s) sort "$deadlines" | while read line; do # parse line - date_field=$(echo "$line" | cut -f 1) - event=$(echo "$line" | cut -f 2) + deadline_field=$(echo "$line" | cut -f 1) + threshold_field=$(echo "$line" | cut -f 2) + description_field=$(echo "$line" | cut -f 3) - # compute temporal distance - date=$(date -d "$date_field" +%s) - days_until=$(( ($date - $today) / (24*60*60) )) + # normalize dates into seconds since unix epoch + deadline=$(date -d "$deadline_field" +%s) + threshold=$(echo "$threshold_field" | sed 's/d/day /g') + birthtime=$(date -d "$deadline_field - ($threshold)" +%s) # show the event iff it's near - if test "$days_until" -lt "$threshold_in_days"; then - echo "$days_until days until $event" + if test "$now" -ge "$birthtime"; then + days_until=$(( ($deadline - $now) / (24*60*60) )) + echo "in $days_until day(s): $description_field" fi done