From 217867b5efe967704ffdeccfa104a30db82ab39d Mon Sep 17 00:00:00 2001 From: fpi Date: Sun, 20 Dec 2020 13:30:04 +0100 Subject: Add agenda breadcrumbs listing parent projects --- emacs-init.org | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/emacs-init.org b/emacs-init.org index bd9940b..a012cd8 100644 --- a/emacs-init.org +++ b/emacs-init.org @@ -3687,11 +3687,42 @@ Simple day agenda with =INPROGRESS= tasks (org-agenda-sorting-strategy '(priority-down category-keep user-defined-down)) (org-agenda-cmp-user-defined #'fpi/org-agenda-compare-hotness) - (org-agenda-prefix-format " %i {%(fpi/org-hotness)} %-12:c") + (org-agenda-prefix-format "%-12:c %-45(fpi/org-breadcrumbs)") ;; (org-agenda-prefix-format " %-3i %-12:c%30b %s") )) #+end_src #+begin_src emacs-lisp :tangle no :noweb-ref org-agenda-config +(defun fpi/org-breadcrumbs () + "Return projects over current entry. + +Similar to %b in `org-agenda-prefix-format'." + (org-with-wide-buffer + (let ((depth (fpi/org-project-depth 10)) + result) + (while (< (length result) depth) + (fpi/org-goto-parent-project 10) + (add-to-list 'result + (org-trim + (org-link-display-format + (replace-regexp-in-string + "\\[[0-9]+%\\]\\|\\[[0-9]+/[0-9]+\\]" "" + (nth 4 (org-heading-components)) ;; get entry title + ))))) + (if result + (reduce + (lambda (a b) (format "%s/%s" a b)) + (mapcar (lambda (s) (format "%.12s" s)) result) + ) + "") + ))) +(defun fpi/org-goto-parent-project (depth) + "Goto first project over current entry." + (when (fpi/parent-is-not-done-project-p) + (org-up-heading-safe)) + (while (and (> depth 0) + (not (fpi/is-not-done-project-p)) + (org-up-heading-safe)) + )) (defun fpi/org-agenda-compare-hotness (a b) "Compare level of hot headlines over entries A and B." (let ((ha (fpi/org-agenda-hotness a)) -- cgit v1.2.3