[chronometrist] simplify key-value display

This commit is contained in:
contrapunctus 2021-07-31 05:34:16 +05:30
parent dfacd9ded4
commit 6bcafade0e
1 changed files with 11 additions and 53 deletions

View File

@ -684,61 +684,19 @@ Return nil (and run `magit-status') if the user answers no."
(seq-filter #'identity args))
separator))
(defun contrapunctus-display-key-values-helper (objects)
(cl-loop for object in objects
collect (cl-typecase object
(string object)
(list (contrapunctus-display-key-values-helper object))
(cons (format "%s %s" (car object) (cdr object)))
(t "")) into strings
finally return (mapconcat #'identity (seq-filter #'identity strings) ", ")))
(defun contrapunctus-display-key-values-function (plist)
"Function used to print key-values in `chronometrist-details' buffers."
(let ((key-values (chronometrist-plist-key-values plist)))
(pcase (plist-get plist :name)
("Programming"
(-let [(&plist :project project
:feature feature
:component component) plist]
(contrapunctus-objects-to-string " - " project component feature)))
("Guitar"
(-let* (((&plist :piece
(&plist :name name
:bwv bwv :opus opus
:movement movement))
plist)
(catalog-name (cond (opus "Op.") (bwv "BWV ") (t "")))
(catalog (if (or opus bwv)
(format "(%s%s)" catalog-name (or opus bwv))))
(movement (cond ((not movement) "")
((chronometrist-plist-pp-alist-p movement)
(contrapunctus-objects-to-string ", " " - " (mapcar #'cdr movement)))
(t (format "- %s" (cdr movement))))))
(contrapunctus-objects-to-string " " name catalog movement)))
("Cooking"
(let ((recipe (plist-get plist :recipe)))
(cond ((null recipe) "")
((chronometrist-plist-p recipe)
(plist-get recipe :name))
((listp recipe)
(contrapunctus-objects-to-string ", " recipe))
(t recipe))))
("Video editing"
(-let [(&plist :episode ep) plist]
(contrapunctus-objects-to-string " " "episode" ep)))
("Exercise"
(-let* (((&plist :warm-up warm-up
:syllabus syllabus
:abdomen abdomen) plist)
(key (cond (warm-up :warm-up)
(syllabus :syllabus)
(abdomen :abdomen)))
(content (or warm-up syllabus abdomen))
(key-string (format "%s - " (s-chop-prefix ":" (symbol-name key))))
(content-string (if (chronometrist-plist-pp-alist-p content)
(cl-loop for elt in content
if (and (consp elt)
(atom (car elt))
(atom (cdr elt)))
collect (format "%s %s" (car elt) (cdr elt))
else collect (format "%s" elt)))))
(concat key-string (contrapunctus-objects-to-string ", " content-string))))
("Reading"
(-let [(&plist :play play :book book) plist]
(or play book)))
(_ "Task not implemented"))))
(let ((values (seq-remove #'keywordp (chronometrist-plist-key-values plist))))
(contrapunctus-display-key-values-helper values)))
#+END_SRC