1
0
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-11-26 07:33:39 +00:00

Agenda: A tags-todo search can now ignore timestamped items

The variables =org-agenda-todo-ignore-with-date=,
=org-agenda-todo-ignore-with-date=, and
=org-agenda-todo-ignore-with-date= make it possible to
exclude TODO entries which have this kind of planning info
associated with them.  This is most useful for people who
schedule everything, and who use the TODO list mainly to find
things that are not yet scheduled.  Thomas Morgan pointed out
that also the tags-todo search may serve exactly this
purpose, and that it might be good to have a way to make
these variables also apply to the tags-todo search.  I can
see than, but could not convince myself to make this the
default.  A new variable must be set to make this happen:
=org-agenda-tags-todo-honor-ignore-options=.
This commit is contained in:
Carsten Dominik 2009-01-25 07:39:26 +01:00
parent 22a6dccce1
commit 3fed83614e
4 changed files with 90 additions and 20 deletions

View File

@ -65,6 +65,21 @@ table. Note that since there is no "current filed" for the
cursor, all row and column references must be absolute, not
relative.
*** A tags-todo search can now ignore timestamped items
The variables =org-agenda-todo-ignore-with-date=,
=org-agenda-todo-ignore-with-date=, and
=org-agenda-todo-ignore-with-date= make it possible to
exclude TODO entries which have this kind of planning info
associated with them. This is most useful for people who
schedule everything, and who use the TODO list mainly to find
things that are not yet scheduled. Thomas Morgan pointed out
that also the tags-todo search may serve exactly this
purpose, and that it might be good to have a way to make
these variables also apply to the tags-todo search. I can
see than, but could not convince myself to make this the
default. A new variable must be set to make this happen:
=org-agenda-tags-todo-honor-ignore-options=.
* Version 6.18
** Incompatible changes

View File

@ -1,3 +1,16 @@
2009-01-25 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-scan-tags): Call
`org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item'.
* org-agenda.el (org-agenda-todo-list, org-agenda-match-view): New
customization groups.
(org-agenda-tags-todo-honor-ignore-options): New option.
(org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item):
New function.
(org-agenda-get-todos): Use
`org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item'.
2009-01-24 Carsten Dominik <carsten.dominik@gmail.com>
* org-exp.el (org-export-format-source-code-or-example): Escape

View File

@ -409,6 +409,18 @@ this one will be used."
"Options concerning skipping parts of agenda files."
:tag "Org Agenda Skip"
:group 'org-agenda)
(defgroup org-agenda-daily/weekly nil
"Options concerning the daily/weekly agenda."
:tag "Org Agenda Daily/Weekly"
:group 'org-agenda)
(defgroup org-agenda-todo-list nil
"Options concerning the global todo list agenda view."
:tag "Org Agenda Todo List"
:group 'org-agenda)
(defgroup org-agenda-match-view nil
"Options concerning the general tags/property/todo match agenda view."
:tag "Org Agenda Match View"
:group 'org-agenda)
(defvar org-agenda-archives-mode nil
"Non-nil means, the agenda will include archived items.
@ -428,7 +440,7 @@ When nil, these trees are also scanned by agenda commands."
When nil, the sublevels of a TODO entry are not checked, resulting in
potentially much shorter TODO lists."
:group 'org-agenda-skip
:group 'org-todo
:group 'org-agenda-todo-list
:type 'boolean)
(defcustom org-agenda-todo-ignore-with-date nil
@ -439,7 +451,7 @@ When this is set, it also covers deadlines and scheduled items, the settings
of `org-agenda-todo-ignore-scheduled' and `org-agenda-todo-ignore-deadlines'
will be ignored."
:group 'org-agenda-skip
:group 'org-todo
:group 'org-agenda-todo-list
:type 'boolean)
(defcustom org-agenda-todo-ignore-scheduled nil
@ -448,7 +460,7 @@ 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'."
:group 'org-agenda-skip
:group 'org-todo
:group 'org-agenda-todo-list
:type 'boolean)
(defcustom org-agenda-todo-ignore-deadlines nil
@ -457,7 +469,22 @@ Near means closer than `org-deadline-warning-days' days.
The idea behind this is that such items will appear in the agenda anyway.
See also `org-agenda-todo-ignore-with-date'."
:group 'org-agenda-skip
:group 'org-todo
:group 'org-agenda-todo-list
:type 'boolean)
(defcustom org-agenda-tags-todo-honor-ignore-options nil
"Non-nil means, honor todo-list ...ignore options also in tags-todo search.
The variables
`org-agenda-todo-ignore-with-date',
`org-agenda-todo-ignore-scheduled'
`org-agenda-todo-ignore-deadlines'
make the global TODO list skip entries that have time stamps of certain
kinds. If this option is set, the same options will also apply for the
tags-todo search, which is the general tags/property matcher
restricted to unfinished TODO entries only."
:group 'org-agenda-skip
:group 'org-agenda-todo-list
:group 'org-agenda-match-view
:type 'boolean)
(defcustom org-agenda-skip-scheduled-if-done nil
@ -467,6 +494,7 @@ it applies only to the actual date of the scheduling. Warnings about
an item with a past scheduling dates are always turned off when the item
is DONE."
:group 'org-agenda-skip
:group 'org-agenda-daily/weekly
:type 'boolean)
(defcustom org-agenda-skip-deadline-if-done nil
@ -476,11 +504,13 @@ This is relevant for the daily/weekly agenda. And it applied only to the
actually date of the deadline. Warnings about approaching and past-due
deadlines are always turned off when the item is DONE."
:group 'org-agenda-skip
:group 'org-agenda-daily/weekly
:type 'boolean)
(defcustom org-agenda-skip-timestamp-if-done nil
"Non-nil means don't select item by timestamp or -range if it is DONE."
:group 'org-agenda-skip
:group 'org-agenda-daily/weekly
:type 'boolean)
(defcustom org-timeline-show-empty-dates 3
@ -559,11 +589,6 @@ option will be ignored.."
:group 'org-agenda-windows
:type 'boolean)
(defgroup org-agenda-daily/weekly nil
"Options concerning the daily/weekly agenda."
:tag "Org Agenda Daily/Weekly"
:group 'org-agenda)
(defcustom org-agenda-ndays 7
"Number of days to include in overview display.
Should be 1 or 7."
@ -640,7 +665,8 @@ and timeline buffers."
(defcustom org-agenda-include-all-todo nil
"Set means weekly/daily agenda will always contain all TODO entries.
The TODO entries will be listed at the top of the agenda, before
the entries for specific days."
the entries for specific days.
This option is deprecated, it is better to define a block agenda instead."
:group 'org-agenda-daily/weekly
:type 'boolean)
@ -1000,7 +1026,6 @@ or a list like `(:background \"Red\")'."
(list (character :tag "Priority" :value ?A)
(sexp :tag "face")))))
(defgroup org-agenda-column-view nil
"Options concerning column view in the agenda."
:tag "Org Agenda Column View"
@ -3248,13 +3273,7 @@ the documentation of `org-diary'."
(save-match-data
(beginning-of-line)
(setq beg (point) end (progn (outline-next-heading) (point)))
(when (or (and org-agenda-todo-ignore-with-date (goto-char beg)
(re-search-forward org-ts-regexp end t))
(and org-agenda-todo-ignore-scheduled (goto-char beg)
(re-search-forward org-scheduled-time-regexp end t))
(and org-agenda-todo-ignore-deadlines (goto-char beg)
(re-search-forward org-deadline-time-regexp end t)
(org-deadline-close (match-string 1))))
(when (org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item end)
(goto-char (1+ beg))
(or org-agenda-todo-list-sublevels (org-end-of-subtree 'invisible))
(throw :skip nil)))
@ -3277,6 +3296,22 @@ the documentation of `org-diary'."
(org-end-of-subtree 'invisible))))
(nreverse ee)))
;;;###autoload
(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
org-agenda-todo-ignore-deadlines)
(setq end (or end (save-excursion (outline-next-heading) (point))))
(save-excursion
(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))
(and org-agenda-todo-ignore-deadlines
(re-search-forward org-deadline-time-regexp end t)
(org-deadline-close (match-string 1)))))))
(defconst org-agenda-no-heading-message
"No heading for this item in buffer or region.")

View File

@ -2497,6 +2497,9 @@ Normal means, no org-mode-specific context."
(declare-function org-agenda-save-markers-for-cut-and-paste "org-agenda"
(beg end))
(declare-function org-agenda-copy-local-variable "org-agenda" (var))
(declare-function org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item
"org-agenda" (&optional end))
(declare-function parse-time-string "parse-time" (string))
(declare-function remember "remember" (&optional initial))
(declare-function remember-buffer-desc "remember" ())
@ -2651,7 +2654,8 @@ If TABLE-TYPE is non-nil, also check for table.el-type tables."
(org-autoload "org-agenda"
'(org-agenda org-agenda-list org-search-view
org-todo-list org-tags-view org-agenda-list-stuck-projects
org-diary org-agenda-to-appt)))
org-diary org-agenda-to-appt
org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item)))
;; Autoload org-remember
@ -9327,7 +9331,10 @@ only lines with a TODO keyword are included in the output."
;; selective inheritance, remove uninherited ones
(setcdr (car tags-alist)
(org-remove-uniherited-tags (cdar tags-alist))))
(when (and (or (not todo-only) (member todo org-not-done-keywords))
(when (and (or (not todo-only)
(and (member todo org-not-done-keywords)
(or (not org-agenda-tags-todo-honor-ignore-options)
(not (org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item)))))
(let ((case-fold-search t)) (eval matcher))
(or
(not (member org-archive-tag tags-list))