summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Lundin <mdl@imapmail.org>2011-01-18 01:51:42 +0000
committerCarsten Dominik <carsten.dominik@gmail.com>2011-01-26 10:59:58 +0100
commit156e6b1466826961bd2577a44ae38e852c724107 (patch)
tree4a55ac678aef50b870b1685f718d0c48f01922b5
parent1cb39b23f91f88d9abcda34199291a7fac5be92b (diff)
downloadorg-mode-156e6b1466826961bd2577a44ae38e852c724107.tar.gz
Add new option for ignoring past or future items in the global todo list
* lisp/org-agenda.el: (org-agenda-todo-ignore-deadlines): New option. (org-agenda-todo-ignore-scheduled): New option. (org-agenda-todo-ignore-timestamp): New option. (org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item): Allow user to specify custom distance to ignore (future or past). (org-agenda-todo-custom-ignore-p): New function. This patch gives users greater control over which past or future items they would like to ignore in the global todo list. By setting org-agenda-todo-ignore-scheduled to 7, for instance, a user can ignore all items scheduled 7 or more days in the future. Similarly, by setting org-agenda-todo-ignore-scheduled to -1, a user can ignore all items that are truly in the past (unlike the 'past setting, which ignores items scheduled today). Thanks to Paul Sexton for the idea for this new functionality.
-rw-r--r--lisp/org-agenda.el42
1 files changed, 39 insertions, 3 deletions
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 3c1104e..5b5bc9a 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -599,6 +599,14 @@ all Don't show any entries with a timestamp in the global todo list.
The idea behind this is that by setting a timestamp, you
have already \"taken care\" of this item.
+This variable can also have an integer as a value. If positive (N),
+todos with a timestamp N or more days in the future will be ignored. If
+negative (-N), todos with a timestamp N or more days in the past will be
+ignored. If 0, todos with a timestamp either today or in the future will
+be ignored. For example, a value of -1 will exclude todos with a
+timestamp in the past (yesterday or earlier), while a value of 7 will
+exclude todos with a timestamp a week or more in the future.
+
See also `org-agenda-todo-ignore-with-date'.
See also the variable `org-agenda-tags-todo-honor-ignore-options' if you want
to make his option also apply to the tags-todo list."
@@ -608,7 +616,8 @@ to make his option also apply to the tags-todo list."
(const :tag "Ignore future timestamp todos" future)
(const :tag "Ignore past or present timestamp todos" past)
(const :tag "Ignore all timestamp todos" all)
- (const :tag "Show timestamp todos" nil)))
+ (const :tag "Show timestamp todos" nil)
+ (integer :tag "Ignore if N or more days in past(-) or future(+).")))
(defcustom org-agenda-todo-ignore-scheduled nil
"Non-nil means, ignore some scheduled TODO items when making TODO list.
@@ -627,6 +636,9 @@ all Don't show any scheduled entries in the global todo list.
t Same as `all', for backward compatibility.
+This variable can also have an integer as a value. See
+`org-agenda-todo-ignore-timestamp' for more details.
+
See also `org-agenda-todo-ignore-with-date'.
See also the variable `org-agenda-tags-todo-honor-ignore-options' if you want
to make his option also apply to the tags-todo list."
@@ -637,7 +649,8 @@ to make his option also apply to the tags-todo list."
(const :tag "Ignore past- or present-scheduled todos" past)
(const :tag "Ignore all scheduled todos" all)
(const :tag "Ignore all scheduled todos (compatibility)" t)
- (const :tag "Show scheduled todos" nil)))
+ (const :tag "Show scheduled todos" nil)
+ (integer :tag "Ignore if N or more days in past(-) or future(+).")))
(defcustom org-agenda-todo-ignore-deadlines nil
"Non-nil means ignore some deadlined TODO items when making TODO list.
@@ -664,6 +677,9 @@ all Ignore all TODO entries that do have a deadline.
t Same as `near', for backward compatibility.
+This variable can also have an integer as a value. See
+`org-agenda-todo-ignore-timestamp' for more details.
+
See also `org-agenda-todo-ignore-with-date'.
See also the variable `org-agenda-tags-todo-honor-ignore-options' if you want
to make his option also apply to the tags-todo list."
@@ -674,7 +690,8 @@ to make his option also apply to the tags-todo list."
(const :tag "Ignore near deadlines (compatibility)" t)
(const :tag "Ignore far deadlines" far)
(const :tag "Ignore all TODOs with a deadlines" all)
- (const :tag "Show all TODOs, even if they have a deadline" nil)))
+ (const :tag "Show all TODOs, even if they have a deadline" nil)
+ (integer :tag "Ignore if N or more days in past(-) or future(+).")))
(defcustom org-agenda-tags-todo-honor-ignore-options nil
"Non-nil means honor todo-list ...ignore options also in tags-todo search.
@@ -4537,6 +4554,16 @@ the documentation of `org-diary'."
(org-end-of-subtree 'invisible))))
(nreverse ee)))
+(defun org-agenda-todo-custom-ignore-p (time n)
+ "Check whether timestamp is farther away then n number of days.
+This function is invoked if `org-agenda-todo-ignore-deadlines',
+`org-agenda-todo-ignore-scheduled' or
+`org-agenda-todo-ignore-timestamp' is set to an integer."
+ (let ((days (org-days-to-time time)))
+ (if (>= n 0)
+ (>= days n)
+ (<= days n))))
+
;;;###autoload
(defun org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item
(&optional end)
@@ -4556,6 +4583,9 @@ the documentation of `org-diary'."
(> (org-days-to-time (match-string 1)) 0))
((eq org-agenda-todo-ignore-scheduled 'past)
(<= (org-days-to-time (match-string 1)) 0))
+ ((numberp org-agenda-todo-ignore-scheduled)
+ (org-agenda-todo-custom-ignore-p
+ (match-string 1) org-agenda-todo-ignore-scheduled))
(t)))
(and org-agenda-todo-ignore-deadlines
(re-search-forward org-deadline-time-regexp end t)
@@ -4567,6 +4597,9 @@ the documentation of `org-diary'."
(> (org-days-to-time (match-string 1)) 0))
((eq org-agenda-todo-ignore-deadlines 'past)
(<= (org-days-to-time (match-string 1)) 0))
+ ((numberp org-agenda-todo-ignore-deadlines)
+ (org-agenda-todo-custom-ignore-p
+ (match-string 1) org-agenda-todo-ignore-deadlines))
(t (org-deadline-close (match-string 1)))))
(and org-agenda-todo-ignore-timestamp
(let ((buffer (current-buffer))
@@ -4589,6 +4622,9 @@ the documentation of `org-diary'."
(> (org-days-to-time (match-string 1)) 0))
((eq org-agenda-todo-ignore-timestamp 'past)
(<= (org-days-to-time (match-string 1)) 0))
+ ((numberp org-agenda-todo-ignore-timestamp)
+ (org-agenda-todo-custom-ignore-p
+ (match-string 1) org-agenda-todo-ignore-timestamp))
(t))))))))))
(defconst org-agenda-no-heading-message