(defun org-unbacked-priorities () "Find toplevel entries, that do not have at least one child in state NEXT and of priority equal or higher" (interactive) (let ((level-1-prio 0) (level-other-highest-prio 0) level-1-heading level-1-state level-1-marker insert-helper result-buffer) (setq result-buffer (get-buffer-create "*Unbacked priorities*")) (save-excursion (set-buffer result-buffer) (erase-buffer) (insert "These TODO-entries have a higher priority than any of its subentries\nin state NEXT (or they have no such subentry).\n\n") ) (setq insert-helper (lambda () (when (and (string= level-1-state "TODO") (< level-other-highest-prio level-1-prio)) (org-add-props level-1-heading nil 'org-marker level-1-marker) (save-excursion (set-buffer result-buffer) (end-of-buffer) (insert level-1-heading "\n"))))) (org-map-entries (lambda () (let (this-heading this-prio this-level this-todo) (setq this-heading (org-get-heading)) (setq this-prio (org-get-priority this-heading)) (setq this-level (org-current-level)) (setq this-todo (org-get-todo-state)) (if (> this-level 1) (if (and (> this-prio level-other-highest-prio) (member (org-get-todo-state) '("NEXT" "WAIT"))) (setq level-other-highest-prio this-prio)) (funcall insert-helper) (setq level-1-heading this-heading) (setq level-1-state (org-get-todo-state)) (setq level-1-marker (org-agenda-new-marker (point))) (setq level-1-prio this-prio) (setq level-other-highest-prio 0)) )) nil 'agenda nil) (funcall insert-helper) (select-window (display-buffer result-buffer)) (fit-buffer-to-window) (org-agenda-mode) ))