From b78838697482ce20c282f594647c4c1ba2efc8fb Mon Sep 17 00:00:00 2001 From: fpi Date: Fri, 30 Oct 2020 19:32:56 +0100 Subject: Sort some agenda entries by hotness --- emacs-init.org | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/emacs-init.org b/emacs-init.org index 0206230..def36ee 100644 --- a/emacs-init.org +++ b/emacs-init.org @@ -3684,10 +3684,31 @@ Simple day agenda with =INPROGRESS= tasks ("h" "Current Hotlist" tags "TODO={NEXT\\|INPROGRESS}" ((org-agenda-overriding-header "Current Hotlist") (org-agenda-skip-function (function fpi/org-agenda-skip-all-not-hot)) + (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 " %-3i %-12:c%30b %s") )) #+end_src #+begin_src emacs-lisp :tangle no :noweb-ref org-agenda-config +(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)) + (hb (fpi/org-agenda-hotness b))) + (cond + ((> ha hb) +1) + ((< ha hb) -1) + (t nil)))) +(defun fpi/org-agenda-hotness (entry) + "Return level of hot headlines over ENTRY." + (org-agenda-with-point-at-orig-entry entry (fpi/org-hotness))) +(defun fpi/org-hotness () + "Return level of hot headlines over current entry." + (let* ((tags (my-org-current-tags (fpi/org-project-depth 10))) + (l1 (length tags)) + (l2 (length (remove "HOT" tags)))) + (- l1 l2))) (defun fpi/org-agenda-skip-all-not-hot () "Skip all not hot entries." (when (not (member "HOT" (my-org-current-tags (fpi/org-project-depth 10)))) -- cgit v1.2.3