[Timeline] Add some abstraction
This commit is contained in:
parent
5d446edd29
commit
55827f5d6c
|
@ -33,6 +33,18 @@ Filter are applied in the order they are given in this list."
|
||||||
:group 'timeline-tools
|
:group 'timeline-tools
|
||||||
:type '(list function))
|
:type '(list function))
|
||||||
|
|
||||||
|
|
||||||
|
;; Model
|
||||||
|
|
||||||
|
(defalias 'timeline-tools-entry-start-time 'car
|
||||||
|
"Start time of ENTRY.")
|
||||||
|
|
||||||
|
(defalias 'timeline-tools-entry-end-time 'cadr
|
||||||
|
"End time of ENTRY.")
|
||||||
|
|
||||||
|
(defalias 'timeline-tools-entry-marker 'caddr
|
||||||
|
"Marker to org task of ENTRY.")
|
||||||
|
|
||||||
|
|
||||||
;; Utilities
|
;; Utilities
|
||||||
|
|
||||||
|
@ -203,7 +215,9 @@ FILES defaults to `org-agenda-files’ including all archives."
|
||||||
turned-around-timeline)))
|
turned-around-timeline)))
|
||||||
(sort turned-around-timeline
|
(sort turned-around-timeline
|
||||||
(lambda (entry-1 entry-2)
|
(lambda (entry-1 entry-2)
|
||||||
(< (car entry-1) (car entry-2))))))
|
(< (timeline-tools-entry-start-time entry-1)
|
||||||
|
(timeline-tools-entry-start-time entry-2))))))
|
||||||
|
|
||||||
(defun timeline-tools-get-category-at-marker (marker)
|
(defun timeline-tools-get-category-at-marker (marker)
|
||||||
"Return ARCHIVE_CATEGORY or CATEGORY at position given by MARKER.
|
"Return ARCHIVE_CATEGORY or CATEGORY at position given by MARKER.
|
||||||
Return whatever is found first."
|
Return whatever is found first."
|
||||||
|
@ -218,9 +232,9 @@ Markers to org mode tasks are combined into a list."
|
||||||
(timeline-tools-get-category-at-marker marker)))
|
(timeline-tools-get-category-at-marker marker)))
|
||||||
timeline)))
|
timeline)))
|
||||||
(mapcar (lambda (cluster)
|
(mapcar (lambda (cluster)
|
||||||
(list (car (car cluster)) ; start of first entry
|
(list (timeline-tools-entry-start-time (-first-item cluster))
|
||||||
(cadr (car (last cluster))) ; end of last entry
|
(timeline-tools-entry-end-time (-last-item cluster))
|
||||||
(mapcar #'third cluster)))
|
(mapcar #'timeline-tools-entry-marker cluster)))
|
||||||
new-timeline)))
|
new-timeline)))
|
||||||
|
|
||||||
(defun timeline-tools-skip-short-entries (timeline)
|
(defun timeline-tools-skip-short-entries (timeline)
|
||||||
|
@ -228,32 +242,35 @@ Markers to org mode tasks are combined into a list."
|
||||||
|
|
||||||
A slot is short if it is not longer than THRESHOLD seconds.
|
A slot is short if it is not longer than THRESHOLD seconds.
|
||||||
Resulting gaps are distributed evenly among adjacent slots."
|
Resulting gaps are distributed evenly among adjacent slots."
|
||||||
(let ((start (car (car timeline)))
|
(let ((start (timeline-tools-entry-start-time (-first-item timeline)))
|
||||||
(end (cadr (car (last timeline))))
|
(end (timeline-tools-entry-end-time (-last-item timeline)))
|
||||||
new-timeline)
|
new-timeline)
|
||||||
|
|
||||||
;; remove all slots that are too short
|
;; remove all slots that are too short
|
||||||
(setq new-timeline
|
(setq new-timeline
|
||||||
(cl-remove-if (lambda (entry)
|
(cl-remove-if (lambda (entry)
|
||||||
(<= (- (cadr entry) (car entry))
|
(<= (- (timeline-tools-entry-end-time entry)
|
||||||
|
(timeline-tools-entry-start-time entry))
|
||||||
timeline-tools-short-task-threshold))
|
timeline-tools-short-task-threshold))
|
||||||
timeline))
|
timeline))
|
||||||
|
|
||||||
;; reset start and end times
|
;; reset start and end times
|
||||||
(setf (car (car new-timeline)) start)
|
(setf (timeline-tools-entry-start-time (-first-item new-timeline)) start)
|
||||||
(setf (cadr (car (last new-timeline))) end)
|
(setf (timeline-tools-entry-end-time (-last-item new-timeline)) end)
|
||||||
|
|
||||||
;; distribute gaps evenly among adjacent slots
|
;; distribute gaps evenly among adjacent slots
|
||||||
(cl-do
|
(cl-do
|
||||||
((sub-timeline new-timeline (cdr sub-timeline)))
|
((sub-timeline new-timeline (cdr sub-timeline)))
|
||||||
((null (cdr sub-timeline)))
|
((null (cdr sub-timeline)))
|
||||||
(let* ((entry-1 (car sub-timeline))
|
(let* ((entry-1 (-first-item sub-timeline))
|
||||||
(entry-2 (cadr sub-timeline))
|
(entry-2 (-second-item sub-timeline))
|
||||||
(end-1 (cadr entry-1))
|
(end-1 (timeline-tools-entry-end-time entry-1))
|
||||||
(start-2 (car entry-2)))
|
(start-2 (timeline-tools-entry-start-time entry-2)))
|
||||||
(when (not (= end-1 start-2))
|
(when (not (= end-1 start-2))
|
||||||
(let ((middle (/ (+ end-1 start-2) 2)))
|
(let ((middle (/ (+ end-1 start-2) 2)))
|
||||||
(setf (cadr entry-1) middle)
|
(setf (timeline-tools-entry-end-time entry-1) middle)
|
||||||
(setf (car entry-2) middle)))))
|
(setf (timeline-tools-entry-start-time entry-2) middle)))))
|
||||||
|
|
||||||
new-timeline))
|
new-timeline))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
|
|
Loading…
Reference in New Issue