ENH show only leaf goals in the goals agenda view
This commit is contained in:
parent
b5ca95a598
commit
f5046e1f1e
10
etc/conf.org
10
etc/conf.org
|
@ -181,6 +181,15 @@ Some useful external libraries that I use all over the place
|
|||
(use-package f
|
||||
:straight t)
|
||||
#+END_SRC
|
||||
*** hash tables
|
||||
:PROPERTIES:
|
||||
:CREATED: [2021-12-24 Fri 16:05]
|
||||
:ID: 2e1f9b7b-c565-464d-8abb-6e8608910ba3
|
||||
:END:
|
||||
#+begin_src emacs-lisp
|
||||
(use-package ht
|
||||
:straight t)
|
||||
#+end_src
|
||||
** internal
|
||||
:PROPERTIES:
|
||||
:ID: d0696764-48ab-4ec6-ab42-42775dc8f793
|
||||
|
@ -3245,6 +3254,7 @@ In the order of display
|
|||
`((org-agenda-overriding-header "Goals")
|
||||
(org-agenda-files
|
||||
'("~/Org/reference/goals"))
|
||||
(org-agenda-skip-function #'org-x-goal-skip-function)
|
||||
(org-agenda-sorting-strategy
|
||||
'(time-up scheduled-down))
|
||||
(org-super-agenda-groups
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
(require 'org-ml)
|
||||
(require 'dash)
|
||||
(require 's)
|
||||
(require 'ht)
|
||||
(require 'org)
|
||||
(require 'org-x-agg)
|
||||
|
||||
|
@ -319,7 +320,8 @@ the current time."
|
|||
"Open PATH and execute BODY."
|
||||
(declare (indent 1))
|
||||
`(with-current-buffer (find-file-noselect ,path)
|
||||
,@body))
|
||||
(save-excursion
|
||||
,@body)))
|
||||
|
||||
(defun org-x-parse-file-subtrees (path which)
|
||||
"Return a list of headlines from file at PATH.
|
||||
|
@ -948,6 +950,44 @@ should be this function again)."
|
|||
|
||||
(t (error (concat "invalid keyword detected: " keyword)))))))
|
||||
|
||||
;; goals
|
||||
|
||||
(defun org-x-buffer-get-goal-links (file)
|
||||
(org-x-with-file file
|
||||
(let ((acc))
|
||||
(cl-flet
|
||||
((get-goal
|
||||
()
|
||||
(-when-let (g (org-entry-get nil org-x-prop-goal))
|
||||
(setq acc (cons g acc)))))
|
||||
;; TODO need to return nothing if a file has a toplevel prop drawer with
|
||||
;; a goal in it but no TODO headlines
|
||||
(goto-char (point-min))
|
||||
(get-goal)
|
||||
(while (outline-next-heading)
|
||||
(get-goal))
|
||||
acc))))
|
||||
|
||||
(defun org-x-get-goal-links ()
|
||||
(-mapcat #'org-x-buffer-get-goal-links (org-files-list)))
|
||||
|
||||
(defun org-x-get-goal-ids ()
|
||||
(--map (cadr (s-match "^\\[\\[id:\\(.*\\)\\]\\[.*\\]\\]$" it))
|
||||
(org-x-get-goal-links)))
|
||||
|
||||
(defmacro org-x-id-get-ids-with (form)
|
||||
""
|
||||
`(--filter (let ((it (cdr it))) ,form) (ht->alist org-id-locations)))
|
||||
|
||||
(defun org-x-id-get-goal-ids ()
|
||||
(let ((goals-file (f-canonical (f-expand "~/Org/reference/goals.org"))))
|
||||
(->> (org-x-id-get-ids-with (equal (f-canonical (f-expand it)) goals-file))
|
||||
(-map #'car))))
|
||||
|
||||
(defun org-x-get-leaf-goals ()
|
||||
""
|
||||
())
|
||||
|
||||
;; iterators
|
||||
|
||||
(defun org-x--clone-get-iterator-project-status (kw)
|
||||
|
@ -1089,6 +1129,15 @@ function will simply return the point of the next headline."
|
|||
(org-x-skip-headings-with-tags
|
||||
(list org-x-tag-no-agenda org-x-tag-maybe org-x-tag-refile)))
|
||||
|
||||
(defun org-x-goal-skip-function ()
|
||||
"Skip function for goals view.
|
||||
This is similar to the task skip function (only show TODO leaf
|
||||
nodes of the outline)."
|
||||
(org-with-wide-buffer
|
||||
(let ((keyword (org-get-todo-state)))
|
||||
(when (org-x-headline-is-project-p keyword)
|
||||
(org-x-skip-heading)))))
|
||||
|
||||
(defun org-x-task-skip-function ()
|
||||
"Skip function for task view."
|
||||
(org-with-wide-buffer
|
||||
|
|
Loading…
Reference in New Issue