]> git.plutz.net Git - shellwiki/commitdiff
weekday recurrence (e.g. 2nd tuesday of a month, etc.)
authorPaul Hänsch <paul@plutz.net>
Thu, 1 Feb 2024 17:17:58 +0000 (18:17 +0100)
committerPaul Hänsch <paul@plutz.net>
Thu, 1 Feb 2024 17:17:58 +0000 (18:17 +0100)
macros/calendar

index e2fa8aa6820b9bdd4e96068e35a355a91bd0c1ee..3d013f2a6a2d6acb47c21bc196c1d1a5789f30a0 100755 (executable)
@@ -77,6 +77,10 @@ rrexpand() {
         week) rrex_week;;
         month) rrex_month;;
         year) rrex_year;;
+        weekday)
+          [ "$rrfreq" -ge 0 ] && rrex_weekday \
+                              || rrex_lastweekday
+          ;;
         *):
           printf '%i   %i      %s      %s\n' "$start" "$end" "$evtitle" "$evlink"
           ;;
@@ -172,6 +176,28 @@ rrex_year() {
   done
 }
 
+rrex_weekday() {
+  # helper for rrexpand: Nth weekday of a month (e.g. 2nd tuesday, etc.)
+  local nstart nend
+
+  nth=$(( ( $(date -ud @$start +%_d) - 1) / 7))
+
+  nend=$(( 0 * 604800 - (dstart - end) % (rrfreq * 604800) + dstart ))
+  nstart=$(( start - end + nend))
+
+  while [ "$nstart" -lt "$rrend" -a "$nstart" -lt "$dend" ]; do
+    [ "$nstart" -ge "$start" -a "$nstart" -ge "$dstart" ] \
+    && [ "$(( ( $(date -ud @$nstart +%_d) -1) / 7 ))" -eq "$nth" ] \
+    && printf '%i      %i      %s      %s\n' "$nstart" "$nend" "$evtitle" "$evlink"
+    nstart="$((nstart + rrfreq * 7 * 86400))"
+      nend="$((nstart - start + end))"
+  done
+}
+
+rrex_lastweekday() {
+:
+}
+
 events="$(
   for dir in "$@"; do
     page_glob "$dir" "$depth"
@@ -277,5 +303,5 @@ cal_month() {
   printf '</tbody></table>'
 }
 
-%rem cal_list
+# cal_list
 cal_month