blob: 5bf8b6d282bd60e4032a469a435ef1c7811eb684 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#!/usr/bin/guile \
-e main -s
!#
(add-to-load-path (dirname (current-filename)))
(use-modules (srfi srfi-19)
(srfi srfi-19 util)
(srfi srfi-26)
(ice-9 format)
(util)
(vcalendar)
(vcalendar output)
(terminal escape)
(terminal util))
;;; ------------------------------------------------------------
#; (define pizza-event (search cal "pizza"))
(define-public (event-in? ev time)
(in-day? (time-utc->date time)
(attr ev 'DTSTART)))
(define (main-loop calendars)
(define time (date->time-utc (current-date)))
(let loop ((char #\nul))
(case char
((#\L #\l) (set! time (add-day time)))
((#\h #\H) (set! time (remove-day time))))
(cls)
(display-calendar-header! (time-utc->date time))
(line)
(let ((events
(sort* (concat
(map (lambda (cal)
(filter (cut event-in? <> time)
(children cal 'VEVENT)))
calendars))
time<? (extract "DTSTART"))))
(for-each-in events
(lambda (ev)
(format #t "~a~a | ~a | ~a~a~%"
(color-escape (attr (parent ev) 'COLOR))
(time->string (attr ev 'DTSTART) "~1 ~3") ; TODO show truncated string
(string-pad-right (attr ev 'SUMMARY) 30) ; TODO show truncated string
(or (attr ev 'LOCATION) "[INGEN LOKAL]")
STR-RESET))))
;; (format #t "c = ~c (~d)~%" char (char->integer char))
(unless (or (eof-object? char)
(memv char (list #\q (ctrl #\C))))
(loop (read-char (current-input-port))))))
(load "config.scm")
(define (main args)
(define calendars (map make-vcomponent calendar-files))
(display calendar-files) (newline)
(with-vulgar
(lambda () (main-loop calendars))))
|