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