From de0a88285e91d95e95f0071912dff36c0b672cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Tue, 26 Feb 2019 18:10:25 +0100 Subject: Some scheme code. --- code.scm | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) (limited to 'code.scm') diff --git a/code.scm b/code.scm index 625b06fc..d6752f1f 100755 --- a/code.scm +++ b/code.scm @@ -18,10 +18,15 @@ (define (extract field) (cut get-attr <> field)) +(define (localize-date date) + (time-utc->date (date->time-utc date) + (date-zone-offset (current-date)))) + ;;; Parse all start times into scheme date objects. (for-each (cut transform-attr! <> "DTSTART" - (cut string->date <> "~Y~m~dT~H~M~S")) - (children cal 'VEVENT)) + (lambda (start) + (localize-date (string->date start "~Y~m~dT~H~M~S~z")))) + (children cal 'VEVENT)) ;;; This function borrowed from web-ics (calendar util) (define* (sort* items comperator #:optional (get identity)) @@ -30,12 +35,34 @@ (comperator (get a) (get b))))) +(define STR-YELLOW "\x1b[0;33m") +(define STR-RESET "\x1b[m") + +(define (date-today? input-date) + (let* ((date (current-date)) + (now (make-date 0 0 0 0 + (date-day date) + (date-month date) + (date-year date) + (date-zone-offset date))) + (then (make-date 0 0 0 0 + (1+ (date-day date)) + (date-month date) + (date-year date) + (date-zone-offset date)))) + (and (time<=? (date->time-utc now) + (date->time-utc input-date)) + (time<=? (date->time-utc input-date) + (date->time-utc then))))) + ;;; Sort the events, and print a simple agenda. (let ((sorted-events (sort* (children cal 'VEVENT) timetime-utc (extract "DTSTART"))))) - (for-each (lambda (ev) (format #t "~a | ~a~%" + (for-each (lambda (ev) (format #t "~a~a~a | ~a~%" + (if (date-today? (get-attr ev "DTSTART")) STR-YELLOW "") (date->string (get-attr ev "DTSTART") "~1 ~H:~M") + STR-RESET (get-attr ev "SUMMARY"))) sorted-events)) -- cgit v1.2.3