org-agenda: Allow finer control of ignored todos.

Add new options to org-agenda-todo-ignore-{scheduled,deadlines}.
These will be convenient for users who want to see only todos
that need attention.
This commit is contained in:
Andy Lutomirski 2010-02-12 18:06:15 -05:00 committed by Carsten Dominik
parent b3e92a8193
commit 36268491a0
2 changed files with 68 additions and 12 deletions

View File

@ -1,3 +1,13 @@
2010-02-14 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-agenda-todo-ignore-scheduled): More allowed
values.
(org-agenda-todo-ignore-scheduled)
(org-agenda-todo-ignore-deadlines): More control with different
allowed values.
(org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item):
Honor the new option settings.
2010-02-12 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-get-location): Make sure the selection buffer is

View File

@ -532,24 +532,59 @@ See also the variable `org-agenda-tags-todo-honor-ignore-options'."
:type 'boolean)
(defcustom org-agenda-todo-ignore-scheduled nil
"Non-nil means don't show scheduled entries in the global todo list.
The idea behind this is that by scheduling it, you have already taken care
of this item.
"Non-nil means, ignore some scheduled TODO items when making TODO list.
This applie when creating the global todo list.
Valid values are:
past Don't show entries scheduled today or in the past.
future Don't show entries scheduled in the future.
The idea behind this is that by scheduling it, you don't want to
think about it until the scheduled date.
t Don't show any scheduled entries in the global todo list.
The idea behind this is that by scheduling it, you have already
\"taken care\" of this item.
See also `org-agenda-todo-ignore-with-date'.
See also the variable `org-agenda-tags-todo-honor-ignore-options'."
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."
:group 'org-agenda-skip
:group 'org-agenda-todo-list
:type 'boolean)
:type '(choice
(const :tag "Ignore future-scheduled todos" future)
(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)))
(defcustom org-agenda-todo-ignore-deadlines nil
"Non-nil means don't show near deadline entries in the global todo list.
A deadline is near when it is closer than `org-deadline-warning-days' days.
The idea behind this is that such items will appear in the agenda anyway.
"Non-nil means ignore some deadlined TODO items when making TODO list.
This applie when creating the global todo list.
Valid values are:
near Don't show near deadline entries. A deadline is near when it is
closer than `org-deadline-warning-days' days. The idea behind this
is that such items will appear in the agenda anyway.
t For backward compatibility, this means the same as `near'.
far Don't show far deadline entries. This is useful if you don't want
to use the todo list to figure out what to do now.
all Ignore all TODO entries that do have a deadline.
See also `org-agenda-todo-ignore-with-date'.
See also the variable `org-agenda-tags-todo-honor-ignore-options'."
:group 'org-agenda-skip
:group 'org-agenda-todo-list
:type 'boolean)
:type '(choice
(const :tag "Ignore near deadlines" near)
(const :tag "Ignore far deadlines" far)
(const :tag "Ignore near deadlines (compatibility)" t)
(const :tag "Ignore all TODOs with a deadlines" all)
(const :tag "Show all TODOs, even if they have a deadline" nil)))
(defcustom org-agenda-tags-todo-honor-ignore-options nil
"Non-nil means honor todo-list ...ignore options also in tags-todo search.
@ -4065,7 +4100,8 @@ the documentation of `org-diary'."
(nreverse ee)))
;;;###autoload
(defun org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item (&optional end)
(defun org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item
(&optional end)
"Do we have a reason to ignore this todo entry because it has a time stamp?"
(when (or org-agenda-todo-ignore-with-date
org-agenda-todo-ignore-scheduled
@ -4075,10 +4111,20 @@ the documentation of `org-diary'."
(or (and org-agenda-todo-ignore-with-date
(re-search-forward org-ts-regexp end t))
(and org-agenda-todo-ignore-scheduled
(re-search-forward org-scheduled-time-regexp end t))
(re-search-forward org-scheduled-time-regexp end t)
(cond
((eq org-agenda-todo-ignore-scheduled 'future)
(> (org-days-to-time (match-string 1)) 0))
((eq org-agenda-todo-ignore-scheduled 'past)
(<= (org-days-to-time (match-string 1)) 0))
(t)))
(and org-agenda-todo-ignore-deadlines
(re-search-forward org-deadline-time-regexp end t)
(org-deadline-close (match-string 1)))))))
(cond
((memq org-agenda-todo-ignore-deadlines '(t all)) t)
((eq org-agenda-todo-ignore-deadlines 'far)
(not (org-deadline-close (match-string 1))))
(t (org-deadline-close (match-string 1)))))))))
(defconst org-agenda-no-heading-message
"No heading for this item in buffer or region.")