From b6ecb4eb537875532704bec5430cdb49a7aac350 Mon Sep 17 00:00:00 2001 From: Daniel Borchmann Date: Tue, 5 Mar 2024 17:38:16 +0100 Subject: [PATCH] Declutter custom Org agenda views MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is mostly to speed up agenda generation, in particular the main agenda view. It turns out that filtering out SCHEDULED items is expensive, but in tags views there is no variable to exclude scheduled items – as for todo and tags-todo views. Thus, SCHEDULED items must be removed with a corresponding search pattern, which is slow. --- init.el | 46 ++++++++++++---------------------------------- 1 file changed, 12 insertions(+), 34 deletions(-) diff --git a/init.el b/init.el index 2bd3c45..85154a4 100644 --- a/init.el +++ b/init.el @@ -989,10 +989,12 @@ ((org-agenda-overriding-header "Deadlines") (org-agenda-sorting-strategy '(deadline-up priority-down)) (org-deadline-warning-days 30))) - (tags-todo "TODO={CONT\\|ATTN}-HOLD-TIMESTAMP>=\"\"-SCHEDULED<>\"\"-NOT_BEFORE>=\"\"" - ((org-agenda-overriding-header "Things to do next (Task shortlist and WIP, TODO ∈ {CONT,ATTN}, not scheduled)"))) - (tags-todo "TODO<>\"CONT\"-HOLD-SOMEWHEN-DATE-WAIT-TEMPLATE-SCHEDULED<>\"\"-NOT_BEFORE>=\"\"" + (tags-todo "TODO={CONT\\|ATTN}-HOLD-TIMESTAMP>=\"\"" + ((org-agenda-overriding-header "Things to do next (Task shortlist and WIP, TODO ∈ {CONT,ATTN}, not scheduled)") + (org-agenda-todo-ignore-scheduled 'all))) + (tags-todo "TODO<>\"CONT\"-HOLD-SOMEWHEN-DATE-WAIT-TEMPLATE" ((org-agenda-overriding-header "Task Backlog (not WIP, not scheduled)") + (org-agenda-todo-ignore-scheduled 'all) (org-tags-match-list-sublevels t))))) ("B" "Backlog" @@ -1011,44 +1013,20 @@ ;; DEADLINE is not necessary, as items will appear on the ;; deadline view anyway. - ;; Check whether any NOT_BEFORE entries are not actually timestaps - (org-ql-block '(and (property "NOT_BEFORE") - (not (string-match-p org-element--timestamp-regexp - (property "NOT_BEFORE")))) - ((org-ql-block-header "Items whose NOT_BEFORE entry is not a timestamp"))) - - ;; Check whether any NOT_BEFORE is behind a SCHEDULED - (org-ql-block '(and (property "NOT_BEFORE") - (scheduled) - (> (org-2ft (property "NOT_BEFORE")) - (org-2ft (property "SCHEDULED")))) - ((org-ql-block-header "Items whose NOT_BEFORE value is after SCHEDULED"))) - - ;; Check whether any NOT_BEFORE is beind their DEADLINE - (org-ql-block '(and (property "NOT_BEFORE") - (deadline) - (> (org-2ft (property "NOT_BEFORE")) - (org-2ft (property "DEADLINE")))) - ((org-ql-block-header "Items whose NOT_BEFORE value is after their DEADLINE"))) - )) ("U" "Unsupervised (Waiting, Missed Appointments, Hold)" - ((tags "WAIT-TODO={DONE\\|CANC\\|MRGD}-HOLD-SOMEWHEN-SCHEDULED>=\"\"-NOT_BEFORE>=\"\"" + ((tags "WAIT-TODO={DONE\\|CANC\\|MRGD}-HOLD-SOMEWHEN-SCHEDULED>=\"\"" ((org-agenda-overriding-header "Waiting For List"))) (tags-todo "DATE-TIMESTAMP>=\"\"" ((org-agenda-overriding-header "Missed appointments (DATEs with timestamp in the past)"))) - (tags "REFILE" - ((org-agenda-files (list db/org-default-refile-file)) - (org-agenda-overriding-header "Things to refile (make it empty!)"))) - (tags "HOLD-TODO={DONE\\|CANC\\|MRGD}-SOMEWHEN-SCHEDULED>=\"\"-NOT_BEFORE>=\"\"" + (tags "HOLD-TODO={DONE\\|CANC\\|MRGD}-SOMEWHEN-SCHEDULED>=\"\"" ((org-agenda-overriding-header "Tasks on Hold"))))) - ("S" "Somewhen (Do if nothing else to do, i.e., personal backlog)" - ((tags "TAGS={SOMEWHEN}+TODO=\"\"-TAGS={NOP\\|TOPIC}-PERIODIC-DATE-SCHEDULED>=\"\"-NOT_BEFORE>=\"\"" + ((tags "TAGS={SOMEWHEN}+TODO=\"\"-NOP-TOPIC-PERIODIC-DATE-SCHEDULED>=\"\"" ((org-agenda-overriding-header "Open Tasks to do SOMEWHEN (no TODO keyword, no PERIODIC, no DATE, no now or future SCHEDULED)"))) - (tags-todo "SOMEWHEN-NOT_BEFORE>=\"\"-ALLTAGS={HOLD}" + (tags-todo "SOMEWHEN-HOLD" ((org-agenda-overriding-header "Things To Do SOMEWHEN") (org-agenda-todo-ignore-with-date t) (org-tags-match-list-sublevels nil))))) @@ -1056,11 +1034,11 @@ ("P" "Current Projects and Topics" ((stuck "" ((org-agenda-overriding-header "Stuck Complex Tasks"))) - (tags "TAGS={NOTE}-TODO={CANC\\|DONE\\|MRGD}-HOLD-NOP-SOMEWHEN-SCHEDULED>=\"\"-NOT_BEFORE>=\"\"" + (tags "TAGS={NOTE}-TODO={CANC\\|DONE\\|MRGD}-HOLD-NOP-SOMEWHEN-SCHEDULED>=\"\"" ((org-agenda-overriding-header "Project Notes (items explicitly tagged with NOTE but not NOP)"))) - (tags "TAGS={TOPIC}-TODO={DONE\\|CANC\\|MRGD}-SOMEWHEN-SCHEDULED>=\"\"-HOLD-WAIT-NOT_BEFORE>=\"\"" + (tags "TAGS={TOPIC}-TODO={DONE\\|CANC\\|MRGD}-SOMEWHEN-SCHEDULED>=\"\"-HOLD-WAIT" ((org-agenda-overriding-header "Topics (items directly tagged with TOPIC)"))) - (tags "TAGS={PERIODIC}-TODO={DONE\\|CANC\\|MRGD}-HOLD-SCHEDULED>=\"\"-HOLD-WAIT-NOT_BEFORE>=\"\"" + (tags "TAGS={PERIODIC}-TODO={DONE\\|CANC\\|MRGD}-HOLD-SCHEDULED>=\"\"-HOLD-WAIT" ((org-agenda-overriding-header "Periodic Projects (PERIODIC, not scheduled in the future, not done, not on hold)"))))) ("W" "Weekly Review"