Hello,
Suppose I want a convenient way to see my most important tasks, the ones
which:
- are due soon (in the next 7 days), or
- have a high priority (#A), or
- are FLAGGED.
If I don't mind having the entries mixed, this is quite simple and short:
#+begin_src emacs-lisp
(add-to-list 'org-agenda-custom-commands
'("H" "Hotlist"
tags-todo "DEADLINE<=\"<+1w>\"|PRIORITY=\"A\"|FLAGGED"
((org-agenda-todo-ignore-scheduled 'future))) t)
#+end_src
Though, if I want 3 different blocks (in the above order) with *no repetition*
of entries, I need to write such a monster expression:
#+begin_src emacs-lisp
(add-to-list 'org-agenda-custom-commands
'("I" "Hotlist"
((tags-todo "DEADLINE<=\"<+1w>\""
((org-agenda-overriding-header "Due in next 7
days")))
(tags-todo
"PRIORITY=\"A\"+DEADLINE=\"\"|PRIORITY=\"A\"+DEADLINE>\"<+1w>\""
((org-agenda-overriding-header "High priority")))
(tags-todo
"FLAGGED+PRIORITY=\"\"+DEADLINE=\"\"|FLAGGED+PRIORITY=\"\"+DEADLINE>\"<+1w>\"|FLAGGED+PRIORITY<>\"A\"+DEADLINE=\"\"|FLAGGED+PRIORITY<>\"A\"+DEADLINE>\"<+1w>\""
((org-agenda-overriding-header "Starred"))))
((org-agenda-todo-ignore-scheduled 'future))) t)
#+end_src
Do you see a way to optimize it (make it shorter)? On the problems relies in
the fact that the inverse of
DEADLINE<="<+1w>"
is
DEADLINE=""|DEADLINE>"<+1w>"
that is 2 tests to be done.
The same applies for the priorities: the inverse of
PRIORITY=\"A\"
is
PRIORITY=""|PRIORITY<>"A"
Hence, an exponential number of checks every time you want to remove
duplicated entries (which would have been displayed in the previous block):
you double the number of subexpressions in the next block...
Any better idea?
Best regards,
Seb
--
Sebastien Vauban