From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Piotr Zielinski" Subject: Bug fix and org-agenda-todo-ignore-deadlines option Date: Fri, 6 Oct 2006 03:15:48 +0200 Message-ID: <3c12eb8d0610051815j1ae94eacqd8ec2dae3e9ca68c@mail.gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GVeJb-0000iI-UP for emacs-orgmode@gnu.org; Thu, 05 Oct 2006 21:15:51 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GVeJZ-0000i3-Ms for emacs-orgmode@gnu.org; Thu, 05 Oct 2006 21:15:51 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GVeJZ-0000i0-Iq for emacs-orgmode@gnu.org; Thu, 05 Oct 2006 21:15:49 -0400 Received: from [64.233.166.177] (helo=py-out-1112.google.com) by monty-python.gnu.org with esmtp (Exim 4.52) id 1GVeQL-0007pV-6Y for emacs-orgmode@gnu.org; Thu, 05 Oct 2006 21:22:49 -0400 Received: by py-out-1112.google.com with SMTP id d42so762523pyd for ; Thu, 05 Oct 2006 18:15:48 -0700 (PDT) Content-Disposition: inline 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 Carsten, Here's a patch that adds a new option org-agenda-todo-ignore-deadlines. If set to t (default nil), the global todo list does not display deadlines which are closer than org-deadline-warning-days, because such deadlines will be displayed by the agenda anyway. Besides, it fixes a bug with org-agenda-todo-ignore-scheduled. Piotr --- org.el 2006-10-04 11:14:17.000000000 +0200 +++ /home/pz215/myfiles/emacs/org.el 2006-10-06 03:09:24.000000000 +0200 @@ -1635,6 +1635,14 @@ :group 'org-todo :type 'boolean) +(defcustom org-agenda-todo-ignore-deadlines nil + "Non-nil means, don't show entries in the global todo list that +have a deadline within the next org-deadline-warning-days +days. The idea behind this is that by such items will appear in the deadline list anyway." + :group 'org-agenda + :group 'org-todo + :type 'boolean) + (defcustom org-timeline-show-empty-dates 3 "Non-nil means, `org-timeline' also shows dates without an entry. When nil, only the days which actually have entries are shown. @@ -5998,6 +6006,15 @@ (setq ans1 (format-time-string "%Y-%m-%d" time))) (if (active-minibuffer-window) (exit-minibuffer)))) +(defun org-days-to-time (timestamp-string) + (- (time-to-days (org-time-string-to-time timestamp-string)) + (time-to-days (current-time)))) + +(defun org-deadline-close (timestamp-string &optional ndays) + (and (< (org-days-to-time timestamp-string) + (or ndays org-deadline-warning-days)) + (not (org-entry-is-done-p)))) + (defun org-check-deadlines (ndays) "Check if there are any deadlines due or past due. A deadline is considered due if it happens within `org-deadline-warning-days' @@ -6013,12 +6030,7 @@ (case-fold-search nil) (regexp (concat "\\<" org-deadline-string " *<\\([^>]+\\)>")) (callback - (lambda () - (and (let ((d1 (time-to-days (current-time))) - (d2 (time-to-days - (org-time-string-to-time (match-string 1))))) - (< (- d2 d1) org-warn-days)) - (not (org-entry-is-done-p)))))) + (lambda () (org-deadline-close (match-string 1) org-warn-days)))) (message "%d deadlines past-due or due within %d days" (org-occur regexp nil callback) org-warn-days))) @@ -8057,17 +8069,24 @@ "\\)\\>") org-not-done-regexp) "[^\n\r]*\\)")) - (sched-re (concat ".*\n?.*?" org-scheduled-time-regexp)) + (deadline-re (concat ".*\\(\n[^*].*\\)?" org-deadline-time-regexp)) + (sched-re (concat ".*\\(\n[^*].*\\)?" org-scheduled-time-regexp)) marker priority category tags ee txt) (goto-char (point-min)) (while (re-search-forward regexp nil t) (catch :skip - (when (and org-agenda-todo-ignore-scheduled - (looking-at sched-re)) - ;; FIXME: the following test also happens below, but we need it here - (or org-agenda-todo-list-sublevels (org-end-of-subtree 'invisible)) - (throw :skip nil)) + (save-match-data + (beginning-of-line) + (when (or (and org-agenda-todo-ignore-scheduled + (looking-at sched-re)) + (and org-agenda-todo-ignore-deadlines + (looking-at deadline-re) + (org-deadline-close (match-string 2)))) + + ;; FIXME: the following test also happens below, but we need it here + (or org-agenda-todo-list-sublevels (org-end-of-subtree 'invisible)) + (throw :skip nil))) (org-agenda-skip) (goto-char (match-beginning 1)) (setq marker (org-agenda-new-marker (1+ (match-beginning 0))) -- Piotr Zielinski, Research Associate Cavendish Laboratory, University of Cambridge, UK http://www.cl.cam.ac.uk/~pz215/