On 6.5.2011, at 19:40, Bernt Hansen wrote: > Hi Carsten, > > Thanks for the patch! This almost does what I want :) > > This patch works for TODO agendas but not tags match agendas which is > what I am trying to use. > > C-c a y returns the result I want > C-c a x should be identical and is not.
Hi Bernt, here is a patch to *replace* the other patch I sent earlier. This one should also work for tags-todo searches.... Completely untested...... Changes at master Modified lisp/org-agenda.el diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 609edd4..84e3247 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -4575,13 +4575,12 @@ the documentation of `org-diary'." (catch :skip (save-match-data (beginning-of-line) + (org-agenda-skip) (setq beg (point) end (save-excursion (outline-next-heading) (point))) (when (org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item end) (goto-char (1+ beg)) (or org-agenda-todo-list-sublevels (org-end-of-subtree 'invisible)) (throw :skip nil))) - (goto-char beg) - (org-agenda-skip) (goto-char (match-beginning 1)) (setq marker (org-agenda-new-marker (match-beginning 0)) category (org-get-category) Modified lisp/org.el diff --git a/lisp/org.el b/lisp/org.el index acbb261..a9dcf46 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -12437,17 +12437,30 @@ only lines with a TODO keyword are included in the output." ;; selective inheritance, remove uninherited ones (setcdr (car tags-alist) (org-remove-uninherited-tags (cdar tags-alist)))) - (when (and (or (not todo-only) - (and (member todo org-not-done-keywords) - (or (not org-agenda-tags-todo-honor-ignore-options) - (not (org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item))))) - (let ((case-fold-search t)) (eval matcher)) - (or - (not (member org-archive-tag tags-list)) - ;; we have an archive tag, should we use this anyway? - (or (not org-agenda-skip-archived-trees) - (and (eq action 'agenda) org-agenda-archives-mode)))) - (unless (eq action 'sparse-tree) (org-agenda-skip)) + (when (and + ;; eval matcher only when the todo condition is OK + (or (not todo-only) + (and (member todo org-not-done-keywords) + (let ((case-fold-search t)) (eval matcher)))) + ;; Call the skipper, but return t if it does not skip, + ;; so that the `and' form continues evaluating + (progn + (unless (eq action 'sparse-tree) (org-agenda-skip)) + t) + + ;; Check if timestamps are deselecting this entry + (or (not todo-only) + (and (member todo org-not-done-keywords) + (or (not org-agenda-tags-todo-honor-ignore-options) + (not (org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item))))) + + ;; Extra check for the archive tag + ;; FIXME: Does the skipper already do this???? + (or + (not (member org-archive-tag tags-list)) + ;; we have an archive tag, should we use this anyway? + (or (not org-agenda-skip-archived-trees) + (and (eq action 'agenda) org-agenda-archives-mode)))) ;; select this headline