[feat] (WIP) make durations for report customizable

This commit is contained in:
contrapunctus 2021-08-03 13:30:05 +05:30
parent 5076f52088
commit 6648b146f9
2 changed files with 45 additions and 28 deletions

View File

@ -1547,6 +1547,20 @@ The first date is the first occurrence of
(chronometrist-previous-week-start)
(chronometrist-report-date-to-dates-in-week)))
(defcustom chronometrist-report-schema
'[("Task" 25 t)
("Sunday" 10 t :right-align t)
("Monday" 10 t :right-align t)
("Tuesday" 10 t :right-align t)
("Wednesday" 10 t :right-align t)
("Thursday" 10 t :right-align t)
("Friday" 10 t :right-align t)
("Saturday" 10 t :right-align t :pad-right 5)
("Total" 12 t :right-align t)]
"Vector specifying schema of `chronometrist-report' buffer.
See `tabulated-list-format'."
:type '(vector))
(defun chronometrist-report-rows ()
"Return rows to be displayed in the `chronometrist-report' buffer."
(cl-loop
@ -1556,10 +1570,11 @@ The first date is the first occurrence of
for task in chronometrist-task-list collect
(let* ((durations (--map (chronometrist-task-time-one-day task (chronometrist-date it))
week-dates))
(duration-strings (mapcar #'chronometrist-format-duration durations))
(total-duration (->> (-reduce #'+ durations)
(chronometrist-format-duration)
(vector))))
(duration-strings (--map (chronometrist-format-duration it 'report)
durations))
(total-duration (--> (-reduce #'+ durations)
(chronometrist-format-duration it 'report)
(vector it))))
(list task
(vconcat
(vector task)
@ -1646,15 +1661,7 @@ Argument _FS-EVENT is ignored."
(define-derived-mode chronometrist-report-mode tabulated-list-mode "Chronometrist-Report"
"Major mode for `chronometrist-report'."
(make-local-variable 'tabulated-list-format)
(setq tabulated-list-format [("Task" 25 t)
("Sunday" 10 t)
("Monday" 10 t)
("Tuesday" 10 t)
("Wednesday" 10 t)
("Thursday" 10 t)
("Friday" 10 t)
("Saturday" 10 t :pad-right 5)
("Total" 12 t)])
(setq tabulated-list-format chronometrist-report-schema)
(make-local-variable 'tabulated-list-entries)
(setq tabulated-list-entries 'chronometrist-report-rows)
(make-local-variable 'tabulated-list-sort-key)

View File

@ -429,8 +429,9 @@ file.")
#+BEGIN_SRC emacs-lisp
(defcustom chronometrist-duration-formats
`((chronometrist "%h:%.2m:%z%.2s" ,(concat (make-string 7 ?\s) "-"))
(chronometrist-total "%h:%.2m:%z%.2s" ,(concat (make-string 6 ?\s) "-"))
(report "%m:%s" ,(make-string 3 ?\s)))
(chronometrist-total "%h:%.2m:%z%.2s" ,(concat (make-string 6 ?\s) "-"))
(report "%h:%.2m:%z%.2s" ,(format "% 5s " "-"))
(report-total "%h:%.2m:%z%.2s" ,(format "% 5s " "-")))
"List specifying duration formats.
Each element must be in the form
@ -2655,6 +2656,22 @@ The first date is the first occurrence of
(chronometrist-previous-week-start)
(chronometrist-report-date-to-dates-in-week)))
#+END_SRC
**** schema :custom:variable:
#+BEGIN_SRC emacs-lisp
(defcustom chronometrist-report-schema
'[("Task" 25 t)
("Sunday" 10 t :right-align t)
("Monday" 10 t :right-align t)
("Tuesday" 10 t :right-align t)
("Wednesday" 10 t :right-align t)
("Thursday" 10 t :right-align t)
("Friday" 10 t :right-align t)
("Saturday" 10 t :right-align t :pad-right 5)
("Total" 12 t :right-align t)]
"Vector specifying schema of `chronometrist-report' buffer.
See `tabulated-list-format'."
:type '(vector))
#+END_SRC
**** rows :procedure:
#+BEGIN_SRC emacs-lisp
(defun chronometrist-report-rows ()
@ -2666,10 +2683,11 @@ The first date is the first occurrence of
for task in chronometrist-task-list collect
(let* ((durations (--map (chronometrist-task-time-one-day task (chronometrist-date it))
week-dates))
(duration-strings (mapcar #'chronometrist-format-duration durations))
(total-duration (->> (-reduce #'+ durations)
(chronometrist-format-duration)
(vector))))
(duration-strings (--map (chronometrist-format-duration it 'report)
durations))
(total-duration (--> (-reduce #'+ durations)
(chronometrist-format-duration it 'report)
(vector it))))
(list task
(vconcat
(vector task)
@ -2770,15 +2788,7 @@ Argument _FS-EVENT is ignored."
(define-derived-mode chronometrist-report-mode tabulated-list-mode "Chronometrist-Report"
"Major mode for `chronometrist-report'."
(make-local-variable 'tabulated-list-format)
(setq tabulated-list-format [("Task" 25 t)
("Sunday" 10 t)
("Monday" 10 t)
("Tuesday" 10 t)
("Wednesday" 10 t)
("Thursday" 10 t)
("Friday" 10 t)
("Saturday" 10 t :pad-right 5)
("Total" 12 t)])
(setq tabulated-list-format chronometrist-report-schema)
(make-local-variable 'tabulated-list-entries)
(setq tabulated-list-entries 'chronometrist-report-rows)
(make-local-variable 'tabulated-list-sort-key)