This function should return a string that explains what the view does. This should remove the need to compile the undonerc in order to get the explanation.
39 lines
1 KiB
Scheme
39 lines
1 KiB
Scheme
(define-module (undone view)
|
|
#:use-module (oop goops)
|
|
#:export (<view> view-list sort-view filter-view print-item
|
|
get-list-for print-view view-doc))
|
|
|
|
(define-generic sort-view)
|
|
(define-generic filter-view)
|
|
(define-generic print-item)
|
|
(define-generic get-list-for)
|
|
(define-generic print-view)
|
|
(define-generic view-doc)
|
|
|
|
(define-class <view> ()
|
|
(todo-list #:init-value '() #:init-keyword #:todo-list))
|
|
|
|
(define view-list `((view . ,<view>)))
|
|
|
|
(define-method (sort-view (v <view>) l) l)
|
|
|
|
(define-method (print-item (v <view>) item)
|
|
(format #t "~2d ~a~%"
|
|
(cdr (assq 'id item))
|
|
(cdr (assq 'content item))))
|
|
|
|
(define-method (filter-view (v <view>))
|
|
(lambda (elm)
|
|
(and (assq 'id elm) (assq 'content elm))))
|
|
|
|
(define-method (get-list-for (v <view>))
|
|
(filter (filter-view v)
|
|
(sort-view v (slot-ref v 'todo-list))))
|
|
|
|
(define-method (print-view (v <view>))
|
|
(for-each
|
|
(lambda (item) (print-item v item))
|
|
(get-list-for v)))
|
|
|
|
(define-method (view-doc (v <view>))
|
|
"Default view, show only the basics.")
|