From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Danjou Subject: [PATCH] org-agenda: allow to negate skip conditions Date: Tue, 14 Dec 2010 18:16:33 +0100 Message-ID: <1292346993-17142-1-git-send-email-julien@danjou.info> Return-path: Received: from [140.186.70.92] (port=51639 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PSYUQ-0005iW-9B for emacs-orgmode@gnu.org; Tue, 14 Dec 2010 12:16:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PSYUN-0003nE-W1 for emacs-orgmode@gnu.org; Tue, 14 Dec 2010 12:16:38 -0500 Received: from coquelicot-s.easter-eggs.com ([213.215.37.94]:58057) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PSYUN-0003mi-P9 for emacs-orgmode@gnu.org; Tue, 14 Dec 2010 12:16:35 -0500 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org Cc: Julien Danjou * org-agenda.el (org-agenda-skip-if): Allow to negate conditions. Signed-off-by: Julien Danjou --- lisp/org-agenda.el | 33 +++++++++++++++++++++------------ 1 files changed, 21 insertions(+), 12 deletions(-) diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index f476449..537a421 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -4076,7 +4076,12 @@ See `org-agenda-skip-if' for details." See `org-agenda-skip-if' for details." (org-agenda-skip-if t conditions)) -(defun org-agenda-skip-if (subtree conditions) +(defun org-agenda-skip-if-not (subtree conditions) + "Skip entry if none of CONDITIONS is false. +See `org-agenda-skip-if' for details." + (org-agenda-skip-if subtree conditions t)) + +(defun org-agenda-skip-if (subtree conditions &optional not) "Checks current entity for CONDITIONS. If SUBTREE is non-nil, the entire subtree is checked. Otherwise, only the entry, i.e. the text before the next heading is checked. @@ -4112,17 +4117,21 @@ Instead of a list a keyword class may be given would skip entries that haven't been marked with any of \"DONE\" keywords. Possible classes are: `todo', `done', `any'. -If any of these conditions is met, this function returns the end point of -the entity, causing the search to continue from there. This is a function -that can be put into `org-agenda-skip-function' for the duration of a command." - (let (beg end m) - (org-back-to-heading t) - (setq beg (point) - end (if subtree - (progn (org-end-of-subtree t) (point)) - (progn (outline-next-heading) (1- (point))))) - (goto-char beg) - (and +If any of these conditions is met, this function returns the end +point of the entity, causing the search to continue from there. + +If NOT is set to t, then this function returns the end point of +the entity only if none of the condition is met, causing the +search to continue from there. + +This is a function that can be put into +`org-agenda-skip-function' for the duration of a command." + (org-back-to-heading t) + (let ((beg (point)) + (end (if subtree + (save-excursion (org-end-of-subtree t)) + (save-excursion (outline-next-heading) (1- (point)))))) + ((if not 'or 'and) (or (and (memq 'scheduled conditions) (re-search-forward org-scheduled-time-regexp end t)) -- 1.7.2.3