updated periodicals
This commit is contained in:
parent
ec131bc5b5
commit
103611d026
78
conf.el
78
conf.el
|
@ -731,6 +731,31 @@ todoitem which in turn has a parent which is a todoitem"
|
||||||
(outline-next-heading)))
|
(outline-next-heading)))
|
||||||
iter-status))
|
iter-status))
|
||||||
|
|
||||||
|
(defconst nd/peri-future-time nd/iter-future-time)
|
||||||
|
|
||||||
|
(defconst nd/peri-statuscodes '(:uninit :stale :fresh))
|
||||||
|
|
||||||
|
(defun nd/get-periodical-status ()
|
||||||
|
(let ((peri-status :uninit)
|
||||||
|
(subtree-end (save-excursion (org-end-of-subtree t))))
|
||||||
|
(save-excursion
|
||||||
|
(setq previous-point (point))
|
||||||
|
(outline-next-heading)
|
||||||
|
(while (and (not (eq peri-status :fresh))
|
||||||
|
(< (point) subtree-end))
|
||||||
|
(if (and (nd/is-periodical-heading-p)
|
||||||
|
(not (nd/heading-has-children 'nd/is-periodical-heading-p)))
|
||||||
|
(let ((new-status
|
||||||
|
(if (nd/heading-compare-timestamp
|
||||||
|
'nd/is-timestamped-heading-p
|
||||||
|
nd/iter-future-time t)
|
||||||
|
:fresh
|
||||||
|
:stale)))
|
||||||
|
(if (nd/compare-statuscodes > new-status peri-status nd/peri-statuscodes)
|
||||||
|
(setq peri-status new-status))))
|
||||||
|
(outline-next-heading)))
|
||||||
|
peri-status))
|
||||||
|
|
||||||
(defun nd/skip-heading ()
|
(defun nd/skip-heading ()
|
||||||
(save-excursion (or (outline-next-heading) (point-max))))
|
(save-excursion (or (outline-next-heading) (point-max))))
|
||||||
|
|
||||||
|
@ -799,29 +824,19 @@ tags that do not have tags in neg-tags-list"
|
||||||
(and (member keyword org-done-keywords)
|
(and (member keyword org-done-keywords)
|
||||||
(nd/is-archivable-heading-p))))
|
(nd/is-archivable-heading-p))))
|
||||||
|
|
||||||
(defun nd/skip-non-fresh-periodical-parent-headers ()
|
(defun nd/skip-non-periodical-parent-headers ()
|
||||||
(save-restriction
|
(save-restriction
|
||||||
(widen)
|
(widen)
|
||||||
(if (not (and (nd/is-periodical-heading-p)
|
(if (not (and (nd/is-periodical-heading-p)
|
||||||
(not (nd/heading-has-parent 'nd/is-periodical-heading-p))
|
(not (nd/heading-has-parent 'nd/is-periodical-heading-p))))
|
||||||
(nd/heading-has-children 'nd/is-fresh-heading-p)))
|
|
||||||
(nd/skip-heading))))
|
(nd/skip-heading))))
|
||||||
|
|
||||||
(defun nd/skip-non-stale-periodical-parent-headers ()
|
(defun nd/skip-non-periodical-untimestamped ()
|
||||||
(save-restriction
|
(save-restriction
|
||||||
(widen)
|
(widen)
|
||||||
(if (not (and (nd/is-periodical-heading-p)
|
(if (not (and (nd/is-periodical-heading-p)
|
||||||
(not (nd/heading-has-parent 'nd/is-periodical-heading-p))
|
(not (nd/is-timestamped-heading-p))
|
||||||
(nd/heading-has-children 'nd/is-stale-heading-p)
|
(not (nd/heading-has-children 'nd/is-periodical-heading-p))))
|
||||||
(not (nd/heading-has-children 'nd/is-fresh-heading-p))))
|
|
||||||
(nd/skip-heading))))
|
|
||||||
|
|
||||||
(defun nd/skip-non-empty-periodical-parent-headers ()
|
|
||||||
(save-restriction
|
|
||||||
(widen)
|
|
||||||
(if (not (and (nd/is-periodical-heading-p)
|
|
||||||
(not (nd/heading-has-parent 'nd/is-periodical-heading-p))
|
|
||||||
(not (nd/heading-has-children 'nd/is-timestamped-heading-p))))
|
|
||||||
(nd/skip-heading))))
|
(nd/skip-heading))))
|
||||||
|
|
||||||
(defun nd/skip-non-iterator-parent-headers ()
|
(defun nd/skip-non-iterator-parent-headers ()
|
||||||
|
@ -1049,15 +1064,21 @@ set as a text property for further sorting"
|
||||||
|
|
||||||
("P"
|
("P"
|
||||||
"Periodical View"
|
"Periodical View"
|
||||||
(,(nd/agenda-base-header-cmd peri-match
|
((tags
|
||||||
"Empty Periodicals"
|
"-NA-REFILE+PARENT_TYPE=\"periodical\""
|
||||||
''nd/skip-non-empty-periodical-parent-headers)
|
((org-agenda-overriding-header "Periodical Status")
|
||||||
,(nd/agenda-base-header-cmd peri-match
|
(org-agenda-skip-function '(nd/skip-non-periodical-parent-headers))
|
||||||
"Stale Periodicals"
|
(org-agenda-before-sorting-filter-function
|
||||||
''nd/skip-non-stale-periodical-parent-headers)
|
(lambda (l) (nd/org-agenda-filter-status
|
||||||
,(nd/agenda-base-header-cmd peri-match
|
nd/peri-statuscodes 'nd/get-periodical-status l)))
|
||||||
"Fresh Periodicals"
|
(org-agenda-cmp-user-defined
|
||||||
''nd/skip-non-fresh-periodical-parent-headers)))
|
(lambda (a b) (nd/org-agenda-sort-prop
|
||||||
|
'project-status nd/peri-statuscodes a b)))
|
||||||
|
(org-agenda-prefix-format '((tags . " %-12:c %(format \"xxxx: \")")))
|
||||||
|
(org-agenda-sorting-strategy '(user-defined-down category-keep))))
|
||||||
|
,(nd/agenda-base-header-cmd "-NA-REFILE+PARENT_TYPE=\"periodical\""
|
||||||
|
"Untimestamped"
|
||||||
|
''nd/skip-non-periodical-untimestamped)))
|
||||||
|
|
||||||
("i"
|
("i"
|
||||||
"Iterator View"
|
"Iterator View"
|
||||||
|
@ -1124,14 +1145,11 @@ set as a text property for further sorting"
|
||||||
("A"
|
("A"
|
||||||
"Archivable Tasks and Projects"
|
"Archivable Tasks and Projects"
|
||||||
(,(nd/agenda-base-header-cmd (concat actionable "-" periodical)
|
(,(nd/agenda-base-header-cmd (concat actionable "-" periodical)
|
||||||
"Archivable Atomic Tasks"
|
"Archivable Atomic Tasks and Iterators"
|
||||||
''nd/skip-non-archivable-atomic-tasks)
|
''nd/skip-non-archivable-atomic-tasks)
|
||||||
,(nd/agenda-base-header-cmd (concat actionable "-" periodical)
|
,(nd/agenda-base-header-cmd (concat actionable)
|
||||||
"Stale Tasks"
|
"Stale Tasks and Periodicals"
|
||||||
''nd/skip-non-stale-headings)
|
''nd/skip-non-stale-headings)
|
||||||
,(nd/agenda-base-header-cmd (concat actionable "-" periodical "+" iterator)
|
|
||||||
"Archivable Iterators"
|
|
||||||
''nd/skip-non-archivable-atomic-tasks)
|
|
||||||
(tags-todo
|
(tags-todo
|
||||||
,(concat actionable "-" periodical "-" iterator)
|
,(concat actionable "-" periodical "-" iterator)
|
||||||
((org-agenda-overriding-header
|
((org-agenda-overriding-header
|
||||||
|
|
96
conf.org
96
conf.org
|
@ -962,6 +962,33 @@ Returns t if heading has certain relationship to other headings
|
||||||
(outline-next-heading)))
|
(outline-next-heading)))
|
||||||
iter-status))
|
iter-status))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
**** periodical testing
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defconst nd/peri-future-time nd/iter-future-time)
|
||||||
|
|
||||||
|
(defconst nd/peri-statuscodes '(:uninit :stale :fresh))
|
||||||
|
|
||||||
|
(defun nd/get-periodical-status ()
|
||||||
|
(let ((peri-status :uninit)
|
||||||
|
(subtree-end (save-excursion (org-end-of-subtree t))))
|
||||||
|
(save-excursion
|
||||||
|
(setq previous-point (point))
|
||||||
|
(outline-next-heading)
|
||||||
|
(while (and (not (eq peri-status :fresh))
|
||||||
|
(< (point) subtree-end))
|
||||||
|
(if (and (nd/is-periodical-heading-p)
|
||||||
|
(not (nd/heading-has-children 'nd/is-periodical-heading-p)))
|
||||||
|
(let ((new-status
|
||||||
|
(if (nd/heading-compare-timestamp
|
||||||
|
'nd/is-timestamped-heading-p
|
||||||
|
nd/iter-future-time t)
|
||||||
|
:fresh
|
||||||
|
:stale)))
|
||||||
|
(if (nd/compare-statuscodes > new-status peri-status nd/peri-statuscodes)
|
||||||
|
(setq peri-status new-status))))
|
||||||
|
(outline-next-heading)))
|
||||||
|
peri-status))
|
||||||
|
#+END_SRC
|
||||||
*** skip functions
|
*** skip functions
|
||||||
These are the primary means we use to sort through tasks. Note that we could do this with
|
These are the primary means we use to sort through tasks. Note that we could do this with
|
||||||
tags in the custom commands section but I find this easier to maintain and possibly faster.
|
tags in the custom commands section but I find this easier to maintain and possibly faster.
|
||||||
|
@ -1065,30 +1092,20 @@ simply because they have timestamps. Parents can be
|
||||||
either fresh (at least one child in the future) or
|
either fresh (at least one child in the future) or
|
||||||
stale (all children in the past).
|
stale (all children in the past).
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun nd/skip-non-fresh-periodical-parent-headers ()
|
(defun nd/skip-non-periodical-parent-headers ()
|
||||||
(save-restriction
|
(save-restriction
|
||||||
(widen)
|
(widen)
|
||||||
(if (not (and (nd/is-periodical-heading-p)
|
(if (not (and (nd/is-periodical-heading-p)
|
||||||
(not (nd/heading-has-parent 'nd/is-periodical-heading-p))
|
(not (nd/heading-has-parent 'nd/is-periodical-heading-p))))
|
||||||
(nd/heading-has-children 'nd/is-fresh-heading-p)))
|
(nd/skip-heading))))
|
||||||
(nd/skip-heading))))
|
|
||||||
|
|
||||||
(defun nd/skip-non-stale-periodical-parent-headers ()
|
(defun nd/skip-non-periodical-untimestamped ()
|
||||||
(save-restriction
|
(save-restriction
|
||||||
(widen)
|
(widen)
|
||||||
(if (not (and (nd/is-periodical-heading-p)
|
(if (not (and (nd/is-periodical-heading-p)
|
||||||
(not (nd/heading-has-parent 'nd/is-periodical-heading-p))
|
(not (nd/is-timestamped-heading-p))
|
||||||
(nd/heading-has-children 'nd/is-stale-heading-p)
|
(not (nd/heading-has-children 'nd/is-periodical-heading-p))))
|
||||||
(not (nd/heading-has-children 'nd/is-fresh-heading-p))))
|
(nd/skip-heading))))
|
||||||
(nd/skip-heading))))
|
|
||||||
|
|
||||||
(defun nd/skip-non-empty-periodical-parent-headers ()
|
|
||||||
(save-restriction
|
|
||||||
(widen)
|
|
||||||
(if (not (and (nd/is-periodical-heading-p)
|
|
||||||
(not (nd/heading-has-parent 'nd/is-periodical-heading-p))
|
|
||||||
(not (nd/heading-has-children 'nd/is-timestamped-heading-p))))
|
|
||||||
(nd/skip-heading))))
|
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** iterators
|
**** iterators
|
||||||
iterators are like projects but have additional status codes based on
|
iterators are like projects but have additional status codes based on
|
||||||
|
@ -1348,15 +1365,21 @@ set as a text property for further sorting"
|
||||||
|
|
||||||
("P"
|
("P"
|
||||||
"Periodical View"
|
"Periodical View"
|
||||||
(,(nd/agenda-base-header-cmd peri-match
|
((tags
|
||||||
"Empty Periodicals"
|
"-NA-REFILE+PARENT_TYPE=\"periodical\""
|
||||||
''nd/skip-non-empty-periodical-parent-headers)
|
((org-agenda-overriding-header "Periodical Status")
|
||||||
,(nd/agenda-base-header-cmd peri-match
|
(org-agenda-skip-function '(nd/skip-non-periodical-parent-headers))
|
||||||
"Stale Periodicals"
|
(org-agenda-before-sorting-filter-function
|
||||||
''nd/skip-non-stale-periodical-parent-headers)
|
(lambda (l) (nd/org-agenda-filter-status
|
||||||
,(nd/agenda-base-header-cmd peri-match
|
nd/peri-statuscodes 'nd/get-periodical-status l)))
|
||||||
"Fresh Periodicals"
|
(org-agenda-cmp-user-defined
|
||||||
''nd/skip-non-fresh-periodical-parent-headers)))
|
(lambda (a b) (nd/org-agenda-sort-prop
|
||||||
|
'project-status nd/peri-statuscodes a b)))
|
||||||
|
(org-agenda-prefix-format '((tags . " %-12:c %(format \"xxxx: \")")))
|
||||||
|
(org-agenda-sorting-strategy '(user-defined-down category-keep))))
|
||||||
|
,(nd/agenda-base-header-cmd "-NA-REFILE+PARENT_TYPE=\"periodical\""
|
||||||
|
"Untimestamped"
|
||||||
|
''nd/skip-non-periodical-untimestamped)))
|
||||||
|
|
||||||
("i"
|
("i"
|
||||||
"Iterator View"
|
"Iterator View"
|
||||||
|
@ -1423,14 +1446,11 @@ set as a text property for further sorting"
|
||||||
("A"
|
("A"
|
||||||
"Archivable Tasks and Projects"
|
"Archivable Tasks and Projects"
|
||||||
(,(nd/agenda-base-header-cmd (concat actionable "-" periodical)
|
(,(nd/agenda-base-header-cmd (concat actionable "-" periodical)
|
||||||
"Archivable Atomic Tasks"
|
"Archivable Atomic Tasks and Iterators"
|
||||||
''nd/skip-non-archivable-atomic-tasks)
|
''nd/skip-non-archivable-atomic-tasks)
|
||||||
,(nd/agenda-base-header-cmd (concat actionable "-" periodical)
|
,(nd/agenda-base-header-cmd (concat actionable)
|
||||||
"Stale Tasks"
|
"Stale Tasks and Periodicals"
|
||||||
''nd/skip-non-stale-headings)
|
''nd/skip-non-stale-headings)
|
||||||
,(nd/agenda-base-header-cmd (concat actionable "-" periodical "+" iterator)
|
|
||||||
"Archivable Iterators"
|
|
||||||
''nd/skip-non-archivable-atomic-tasks)
|
|
||||||
(tags-todo
|
(tags-todo
|
||||||
,(concat actionable "-" periodical "-" iterator)
|
,(concat actionable "-" periodical "-" iterator)
|
||||||
((org-agenda-overriding-header
|
((org-agenda-overriding-header
|
||||||
|
|
Loading…
Reference in New Issue