From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bastien Subject: Re: Re: Repeating TODO are shown every day in the agenda Date: Wed, 02 Feb 2011 10:39:32 +0100 Message-ID: <877hdiepwr.fsf@gnu.org> References: <87k4hn8obs.fsf@fastmail.fm> <20110131085842.4c923739@gaia.hsu-hh.de> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from [140.186.70.92] (port=53901 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pkdun-0003BX-0E for emacs-orgmode@gnu.org; Wed, 02 Feb 2011 09:42:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PkZBn-0004Bv-Ga for emacs-orgmode@gnu.org; Wed, 02 Feb 2011 04:39:53 -0500 Received: from mail-fx0-f41.google.com ([209.85.161.41]:40410) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PkZBn-00047r-8L for emacs-orgmode@gnu.org; Wed, 02 Feb 2011 04:39:51 -0500 Received: by fxm12 with SMTP id 12so8742194fxm.0 for ; Wed, 02 Feb 2011 01:39:29 -0800 (PST) In-Reply-To: <20110131085842.4c923739@gaia.hsu-hh.de> (Detlef Steuer's message of "Mon, 31 Jan 2011 08:58:42 +0100") 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: Detlef Steuer Cc: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Detlef Steuer writes: > And if this is not currently possible, that would be a welcome > addition to org-mode's features! I definitely have use cases for such > a setting. The attached patch implements it. When org-agenda-repeating-timestamp-show-all is set to a list of TODO keywords, repeating agenda items will only be displayed if they have this TODO keywords. Unless anyone objects against this change, I'm willing to commit it. In the meantime, I welcome tests/feedback. Thanks to you and Jeff for this idea! --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=repeating-timestamp.patch >From f121bc5e72ac356f00f1cb31a10d2f042785667a Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Wed, 2 Feb 2011 10:35:56 +0100 Subject: [PATCH] Make org-agenda-repeating-timestamp-show-all aware of TODO keywords. * org-agenda.el (org-agenda-repeating-timestamp-show-all): Allow to use a list of TODO keywords as the value of this variable. The agenda will show repeating stamps for entries matching these TODO keywords. (org-agenda-get-timestamps, org-agenda-get-deadlines) (org-agenda-get-scheduled): Allow the use of a list of keywords in `org-agenda-repeating-timestamp-show-all'. --- This was suggested by Jeff Horn and supported by Detlef Steuer. --- lisp/org-agenda.el | 40 ++++++++++++++++++++++++++-------------- 1 files changed, 26 insertions(+), 14 deletions(-) diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index bbe9d8a..312482e 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -1066,10 +1066,15 @@ This option is deprecated, it is better to define a block agenda instead." (defcustom org-agenda-repeating-timestamp-show-all t "Non-nil means show all occurrences of a repeating stamp in the agenda. -When nil, only one occurrence is shown, either today or the -nearest into the future." +When set to a list of strings, only show occurrences of repeating +stamps for these TODO keywords. When nil, only one occurrence is +shown, either today or the nearest into the future." :group 'org-agenda-daily/weekly - :type 'boolean) + :type '(choice + (const :tag "Show repeating stamps" t) + (repeat :tag "Show repeating stamps for these TODO keywords" + (string :tag "TODO Keyword")) + (const :tag "Don't show repeating stamps" nil))) (defcustom org-scheduled-past-days 10000 "No. of days to continue listing scheduled items that are not marked DONE. @@ -4669,14 +4674,17 @@ This function is invoked if `org-agenda-todo-ignore-deadlines', (goto-char (point-min)) (while (setq end-of-match (re-search-forward regexp nil t)) (setq b0 (match-beginning 0) - b3 (match-beginning 3) e3 (match-end 3)) + b3 (match-beginning 3) e3 (match-end 3) + todo-state (save-match-data (ignore-errors (org-get-todo-state))) + show-all (or (eq org-agenda-repeating-timestamp-show-all t) + (member todo-state + org-agenda-repeating-timestamp-show-all))) (catch :skip (and (org-at-date-range-p) (throw :skip nil)) (org-agenda-skip) (if (and (match-end 1) (not (= d1 (org-time-string-to-absolute - (match-string 1) d1 nil - org-agenda-repeating-timestamp-show-all)))) + (match-string 1) d1 nil show-all)))) (throw :skip nil)) (if (and e3 (not (org-diary-sexp-entry (buffer-substring b3 e3) "" date))) @@ -4693,7 +4701,6 @@ This function is invoked if `org-agenda-todo-ignore-deadlines', clockp (and org-agenda-include-inactive-timestamps (or (string-match org-clock-string tmp) (string-match "]-+\\'" tmp))) - todo-state (ignore-errors (org-get-todo-state)) donep (member todo-state org-done-keywords)) (if (or scheduledp deadlinep closedp clockp (and donep org-agenda-skip-timestamp-if-done)) @@ -4904,7 +4911,7 @@ be skipped." (d1 (calendar-absolute-from-gregorian date)) ; DATE bound by calendar d2 diff dfrac wdays pos pos1 category tags suppress-prewarning - ee txt head face s todo-state upcomingp donep timestr) + ee txt head face s todo-state show-all upcomingp donep timestr) (goto-char (point-min)) (while (re-search-forward regexp nil t) (setq suppress-prewarning nil) @@ -4922,9 +4929,12 @@ be skipped." (setq s (match-string 1) txt nil pos (1- (match-beginning 1)) + todo-state (save-match-data (org-get-todo-state)) + show-all (or (eq org-agenda-repeating-timestamp-show-all t) + (member todo-state + org-agenda-repeating-timestamp-show-all)) d2 (org-time-string-to-absolute - (match-string 1) d1 'past - org-agenda-repeating-timestamp-show-all) + (match-string 1) d1 'past show-all) diff (- d2 d1) wdays (if suppress-prewarning (let ((org-deadline-warning-days suppress-prewarning)) @@ -4939,7 +4949,7 @@ be skipped." (and todayp (not org-agenda-only-exact-dates))) (= diff 0))) (save-excursion - (setq todo-state (org-get-todo-state)) + ;; (setq todo-state (org-get-todo-state)) (setq donep (member todo-state org-done-keywords)) (if (and donep (or org-agenda-skip-deadline-if-done @@ -5024,9 +5034,12 @@ FRACTION is what fraction of the head-warning time has passed." (setq s (match-string 1) txt nil pos (1- (match-beginning 1)) + todo-state (save-match-data (org-get-todo-state)) + show-all (or (eq org-agenda-repeating-timestamp-show-all t) + (member todo-state + org-agenda-repeating-timestamp-show-all)) d2 (org-time-string-to-absolute - (match-string 1) d1 'past - org-agenda-repeating-timestamp-show-all) + (match-string 1) d1 'past show-all) diff (- d2 d1)) (setq pastschedp (and todayp (< diff 0))) ;; When to show a scheduled item in the calendar: @@ -5036,7 +5049,6 @@ FRACTION is what fraction of the head-warning time has passed." (and todayp (not org-agenda-only-exact-dates))) (= diff 0)) (save-excursion - (setq todo-state (org-get-todo-state)) (setq donep (member todo-state org-done-keywords)) (if (and donep (or org-agenda-skip-scheduled-if-done -- 1.7.3.5 --=-=-= Content-Type: text/plain -- Bastien --=-=-= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode --=-=-=--