[spark] write MVP
This commit is contained in:
parent
efe3042ad9
commit
adc0261a7b
|
@ -35,6 +35,76 @@
|
|||
(require 'spark)
|
||||
#+END_SRC
|
||||
** Code
|
||||
*** length :custom:variable:
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defcustom chronometrist-spark-length 7
|
||||
"Length of each sparkline in number of days.")
|
||||
#+END_SRC
|
||||
|
||||
*** TODO row-transformer :function:
|
||||
if larger than 7
|
||||
add space after (% length 7)th element
|
||||
then add space after every 7 elements
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defun chronometrist-spark-row-transformer (row)
|
||||
"Add a sparkline cell to ROW.
|
||||
Used to add a sparkline column to `chronometrist-rows'.
|
||||
|
||||
ROW must be a valid element of the list specified by
|
||||
`tabulated-list-entries'."
|
||||
(-let (((task vector) row)
|
||||
(sparkline (cl-loop with today = (ts-now)
|
||||
for day from (- (- chronometrist-spark-length 1)) to 0
|
||||
collect (chronometrist-task-time-one-day
|
||||
task (ts-adjust 'day day today))
|
||||
into durations
|
||||
finally return (spark durations))))
|
||||
(list task (vconcat vector `[,sparkline]))))
|
||||
|
||||
#+END_SRC
|
||||
|
||||
*** TODO schema-transformer :function:
|
||||
calculate length while accounting for space
|
||||
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defun chronometrist-spark-schema-transformer (schema)
|
||||
"Add a sparkline column to SCHEMA.
|
||||
Used to add a sparkline column to `chronometrist-schema-transformers'.
|
||||
SCHEMA should be a vector as specified by `tabulated-list-format'."
|
||||
(vconcat schema `[("Graph" ,chronometrist-spark-length t)]))
|
||||
#+END_SRC
|
||||
|
||||
*** setup :writer:
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defun chronometrist-spark-setup ()
|
||||
"Add `chronometrist-sparkline' functions to `chronometrist' hooks."
|
||||
(add-to-list 'chronometrist-row-transformers #'chronometrist-spark-row-transformer)
|
||||
(add-to-list 'chronometrist-schema-transformers #'chronometrist-spark-schema-transformer)
|
||||
(add-hook 'chronometrist-after-in-functions #'chronometrist-spark-run-alert-timers)
|
||||
(add-hook 'chronometrist-after-out-functions #'chronometrist-spark-stop-alert-timers))
|
||||
#+END_SRC
|
||||
|
||||
*** teardown :writer:
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(defun chronometrist-spark-teardown ()
|
||||
"Remove `chronometrist-sparkline' functions from `chronometrist' hooks."
|
||||
(setq chronometrist-row-transformers
|
||||
(remove #'chronometrist-spark-row-transformer chronometrist-row-transformers)
|
||||
chronometrist-schema-transformers
|
||||
(remove #'chronometrist-spark-schema-transformer chronometrist-schema-transformers))
|
||||
(remove-hook 'chronometrist-after-in-functions #'chronometrist-spark-run-alert-timers)
|
||||
(remove-hook 'chronometrist-after-out-functions #'chronometrist-spark-stop-alert-timers))
|
||||
#+END_SRC
|
||||
|
||||
*** minor-mode :minor:mode:
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(define-minor-mode chronometrist-spark-minor-mode
|
||||
nil nil nil nil
|
||||
;; when being enabled/disabled, `chronometrist-spark-minor-mode' will already be t/nil here
|
||||
(if chronometrist-spark-minor-mode (chronometrist-spark-setup) (chronometrist-spark-teardown)))
|
||||
#+END_SRC
|
||||
|
||||
** Provide
|
||||
#+BEGIN_SRC emacs-lisp
|
||||
(provide 'chronometrist-spark)
|
||||
|
|
Reference in New Issue