summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Guerry <bzg@altern.org>2011-02-02 10:35:56 +0100
committerBastien Guerry <bzg@altern.org>2011-02-02 10:35:56 +0100
commitf121bc5e72ac356f00f1cb31a10d2f042785667a (patch)
tree251f5aed4655bdc2f67c15db0149ee6d833fcc09
parent8158131e7a8f7ce38e385eeda1c17f27f1796bcd (diff)
downloadorg-mode-f121bc5e72ac356f00f1cb31a10d2f042785667a.tar.gz
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.
-rw-r--r--lisp/org-agenda.el40
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