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
|
(use-package f
|
||||||
:straight t)
|
:straight t)
|
||||||
#+END_SRC
|
#+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
|
** internal
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:ID: d0696764-48ab-4ec6-ab42-42775dc8f793
|
:ID: d0696764-48ab-4ec6-ab42-42775dc8f793
|
||||||
|
@ -3245,6 +3254,7 @@ In the order of display
|
||||||
`((org-agenda-overriding-header "Goals")
|
`((org-agenda-overriding-header "Goals")
|
||||||
(org-agenda-files
|
(org-agenda-files
|
||||||
'("~/Org/reference/goals"))
|
'("~/Org/reference/goals"))
|
||||||
|
(org-agenda-skip-function #'org-x-goal-skip-function)
|
||||||
(org-agenda-sorting-strategy
|
(org-agenda-sorting-strategy
|
||||||
'(time-up scheduled-down))
|
'(time-up scheduled-down))
|
||||||
(org-super-agenda-groups
|
(org-super-agenda-groups
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
(require 'org-ml)
|
(require 'org-ml)
|
||||||
(require 'dash)
|
(require 'dash)
|
||||||
(require 's)
|
(require 's)
|
||||||
|
(require 'ht)
|
||||||
(require 'org)
|
(require 'org)
|
||||||
(require 'org-x-agg)
|
(require 'org-x-agg)
|
||||||
|
|
||||||
|
@ -319,7 +320,8 @@ the current time."
|
||||||
"Open PATH and execute BODY."
|
"Open PATH and execute BODY."
|
||||||
(declare (indent 1))
|
(declare (indent 1))
|
||||||
`(with-current-buffer (find-file-noselect ,path)
|
`(with-current-buffer (find-file-noselect ,path)
|
||||||
,@body))
|
(save-excursion
|
||||||
|
,@body)))
|
||||||
|
|
||||||
(defun org-x-parse-file-subtrees (path which)
|
(defun org-x-parse-file-subtrees (path which)
|
||||||
"Return a list of headlines from file at PATH.
|
"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)))))))
|
(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
|
;; iterators
|
||||||
|
|
||||||
(defun org-x--clone-get-iterator-project-status (kw)
|
(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
|
(org-x-skip-headings-with-tags
|
||||||
(list org-x-tag-no-agenda org-x-tag-maybe org-x-tag-refile)))
|
(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 ()
|
(defun org-x-task-skip-function ()
|
||||||
"Skip function for task view."
|
"Skip function for task view."
|
||||||
(org-with-wide-buffer
|
(org-with-wide-buffer
|
||||||
|
|
Loading…
Reference in New Issue