Hi,

Here are three functions related to todo and deadline highlighting is
the todo buffer.  The first lets you highlight upoming deadlines and
todo items at the same time.

(defun org-check-deadlines-and-todos (ndays)
 (org-check-deadlines ndays)
 (flet ((org-remove-occur-highlights (&optional beg end noremove))
         (org-overview ()))
   (org-show-todo-tree nil)))

It would be nice to be able to tell the org-occur function not to
remove existing highlights in a less hacky way.  Another suggestion:
explicit specification of the face used for highlighting so that
deadlines and todos could use a different face.  Yet another
suggestion: the org-occur callback could return the face to use, so
that different faces could be used for deadline highlighting,
depending on the urgency of the deadline (ie. in 3 days vs. in 30
days).

The following two functions redefine org-show-todo-tree, so that TODO
items SCHEDULED for the future are not highlighted.  Only
non-scheduled TODO items or TODO items scheduled for the past or
present are highlighted.  The SCHEDULED directive must be on the same
line as the TODO keyword.

(defun org-todo-is-current ()
 "Checks whether a TODO items is current."
 (if (re-search-forward org-scheduled-time-regexp (point-at-eol) t)
     (let ((today (calendar-absolute-from-gregorian
                    (calendar-current-date)))
            (timestamp (time-to-days
                        (org-time-string-to-time (match-string 1)))))
        (<= timestamp today))
   t))

(defun org-show-todo-tree (arg)
 "Make a compact tree which shows all headlines marked with TODO.
The tree will show the lines where the regexp matches, and all higher
headlines above the match.
With \\[universal-argument] prefix, also show the DONE entries.
With a numeric prefix N, construct a sparse tree for the Nth element
of `org-todo-keywords'."
 (interactive "P")
 (let ((case-fold-search nil)
        (kwd-re
         (cond ((null arg) org-not-done-regexp)
               ((equal arg '(4)) org-todo-regexp)
               ((<= (prefix-numeric-value arg) (length org-todo-keywords))
                (regexp-quote (nth (1- (prefix-numeric-value arg))
                                   org-todo-keywords)))
               (t (error "Invalid prefix argument: %s" arg)))))
   (message "%d TODO entries found"
             (org-occur (concat "^" outline-regexp " +" kwd-re )
                        'org-todo-is-current))))


Piotr


_______________________________________________
Emacs-orgmode mailing list
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode

Reply via email to