From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bernt Hansen Subject: [PATCH] Fix agenda display for late scheduled and deadline tasks Date: Sat, 12 Jun 2010 12:13:55 -0400 Message-ID: <1276359235-19934-1-git-send-email-bernt@norang.ca> References: <1276358948-19543-1-git-send-email-bernt@norang.ca> Return-path: Received: from [140.186.70.92] (port=45389 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1ONTLN-0007mU-De for emacs-orgmode@gnu.org; Sat, 12 Jun 2010 12:14:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1ONTLM-0002ht-4K for emacs-orgmode@gnu.org; Sat, 12 Jun 2010 12:14:01 -0400 Received: from mho-02-ewr.mailhop.org ([204.13.248.72]:56771) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1ONTLM-0002hj-1U for emacs-orgmode@gnu.org; Sat, 12 Jun 2010 12:14:00 -0400 Received: from cpe000102d0fe75-cm0012256ecbde.cpe.net.cable.rogers.com ([99.239.148.180] helo=mail.norang.ca) by mho-02-ewr.mailhop.org with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.68) (envelope-from ) id 1ONTLL-000BgG-Fw for emacs-orgmode@gnu.org; Sat, 12 Jun 2010 16:13:59 +0000 In-Reply-To: <1276358948-19543-1-git-send-email-bernt@norang.ca> 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: Bernt Hansen * lisp/org-agenda.el (org-agenda-get-deadlines): (org-agenda-get-scheduled): * lisp/org.el (org-time-string-to-seconds): For deadline and scheduled agenda display ignore the cyclic repeater when calculating how many days late the task is. If you have a weekly task and miss the date the agenda view will show more than a week late now instead of resetting on the cyclic repeating date. This makes it much more obvious when you missed a repeating task after the repeater. --- Updated patch - fixes DAYN -> DAYNR in the docstring. -Bernt lisp/org-agenda.el | 4 ++-- lisp/org.el | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 93334b6..1977b84 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -4573,7 +4573,7 @@ be skipped." pos (1- (match-beginning 1)) d2 (org-time-string-to-absolute (match-string 1) d1 'past - org-agenda-repeating-timestamp-show-all) + org-agenda-repeating-timestamp-show-all t) diff (- d2 d1) wdays (if suppress-prewarning (let ((org-deadline-warning-days suppress-prewarning)) @@ -4675,7 +4675,7 @@ FRACTION is what fraction of the head-warning time has passed." pos (1- (match-beginning 1)) d2 (org-time-string-to-absolute (match-string 1) d1 'past - org-agenda-repeating-timestamp-show-all) + org-agenda-repeating-timestamp-show-all t) diff (- d2 d1)) (setq pastschedp (and todayp (< diff 0))) ;; When to show a scheduled item in the calendar: diff --git a/lisp/org.el b/lisp/org.el index 5cbd10a..f23a9e8 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -14683,18 +14683,20 @@ days in order to avoid rounding problems." (defun org-time-string-to-seconds (s) (org-float-time (org-time-string-to-time s))) -(defun org-time-string-to-absolute (s &optional daynr prefer show-all) +(defun org-time-string-to-absolute (s &optional daynr prefer show-all ignore-cyclic) "Convert a time stamp to an absolute day number. -If there is a specifyer for a cyclic time stamp, get the closest date to +If there is a specifier for a cyclic time stamp, get the closest date to DAYNR. PREFER and SHOW-ALL are passed through to `org-closest-date'. -the variable date is bound by the calendar when this is called." +the variable date is bound by the calendar when this is called. +IGNORE-CYCLIC ignores cyclic repeaters so the returned absolute date +is based on the original date." (cond ((and daynr (string-match "\\`%%\\((.*)\\)" s)) (if (org-diary-sexp-entry (match-string 1 s) "" date) daynr (+ daynr 1000))) - ((and daynr (string-match "\\+[0-9]+[dwmy]" s)) + ((and (not ignore-cyclic) daynr (string-match "\\+[0-9]+[dwmy]" s)) (org-closest-date s (if (and (boundp 'daynr) (integerp daynr)) daynr (time-to-days (current-time))) (match-string 0 s) prefer show-all)) -- 1.7.1.256.g3499