emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] org-agenda-log-mode doesn't list past scheduled items if org-agenda-


From: Antoine Levitt
Subject: [O] org-agenda-log-mode doesn't list past scheduled items if org-agenda-skip-scheduled-if-done is t
Date: Tue, 05 Apr 2011 12:30:50 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (gnu/linux)

I guess my use case is pretty common: I use org-agenda to keep track of
appointments, and use org-agenda-skip-scheduled-if-done to avoid
displaying past appointments. If I want to review what I did last week
for instance, I'd like the SCHEDULED dates to appear in
org-agenda-log-mode, not the dates where I closed the TODO entry. But
org-agenda-log-mode-items only has support for closed, clock and state
changes. A nice feature would be a 'scheduled option, which would
display done entries that have a SCHEDULED tag.

I tried to implement it, but got stuck at date handling (apparently, the
problem is that SCHEDULED items use <> syntax, while CLOSED uses
[]. Not sure why.) Could someone take a look at it?

I'm attaching a very preliminary attempt to implement it, in case anyone
is interested. It's buggy because of the date issues.

diff --git a/lisp/org/org-agenda.el b/lisp/org/org-agenda.el
index 9adc180..89c9dde 100644
--- a/lisp/org/org-agenda.el
+++ b/lisp/org/org-agenda.el
@@ -4733,6 +4733,7 @@ be skipped."
                (list
                 (if (memq 'closed items) (concat "\\<" org-closed-string))
                 (if (memq 'clock items) (concat "\\<" org-clock-string))
+                (if (memq 'scheduled items)  (concat "\\<" 
org-scheduled-string))
                 (if (memq 'state items) "- State \"\\([a-zA-Z0-9]+\\)\".*?"))))
         (parts-re (if parts (mapconcat 'identity parts "\\|")
                     (error "`org-agenda-log-mode-items' is empty")))
@@ -4744,10 +4745,10 @@ be skipped."
                    (format-time-string
                     (car org-time-stamp-formats)
                     (apply 'encode-time  ; DATE bound by calendar
-                           (list 0 0 0 (nth 1 date) (car date) (nth 2 date))))
+                           (list 0 0 0 (nth 1 date) (car date) (nth 2 date))))
                    1 11))))
         (org-agenda-search-headline-for-time nil)
-        marker hdmarker priority category tags closedp statep clockp state
+        marker hdmarker priority category tags closedp statep clockp 
scheduledp state
         ee txt extra timestr rest clocked)
     (goto-char (point-min))
     (while (re-search-forward regexp nil t)
@@ -4755,8 +4756,9 @@ be skipped."
        (org-agenda-skip)
        (setq marker (org-agenda-new-marker (match-beginning 0))
              closedp (equal (match-string 1) org-closed-string)
+             scheduledp (equal (match-string 1) org-scheduled-string)
              statep (equal (string-to-char (match-string 1)) ?-)
-             clockp (not (or closedp statep))
+             clockp (not (or closedp scheduledp statep))
              state (and statep (match-string 2))
              category (org-get-category (match-beginning 0))
              timestr (buffer-substring (match-beginning 0) (point-at-eol))
@@ -4765,7 +4767,7 @@ be skipped."
          ;; substring should only run to end of time stamp
          (setq rest (substring timestr (match-end 0))
                timestr (substring timestr 0 (match-end 0)))
-         (if (and (not closedp) (not statep)
+         (if (and (not closedp) (not statep) (not scheduledp)
                   (string-match 
"\\([0-9]\\{1,2\\}:[0-9]\\{2\\}\\)\\].*?\\([0-9]\\{1,2\\}:[0-9]\\{2\\}\\)" 
rest))
              (progn (setq timestr (concat (substring timestr 0 -1)
                                           "-" (match-string 1 rest) "]"))
@@ -4780,6 +4782,9 @@ be skipped."
                 (setq extra (match-string 1))))
           (clockp
            (and (looking-at ".*\n[ \t]*-[ \t]+\\([^-\n \t].*?\\)[ \t]*$")
+                (setq extra (match-string 1))))
+          (scheduledp
+           (and (looking-at ".*\n[ \t]*-[ \t]+\\([^-\n \t].*?\\)[ \t]*$")
                 (setq extra (match-string 1)))))
          (if (not (re-search-backward "^\\*+ " nil t))
              (setq txt org-agenda-no-heading-message)
@@ -4788,6 +4793,8 @@ be skipped."
                  tags (org-get-tags-at))
            (looking-at "\\*+[ \t]+\\([^\r\n]+\\)")
            (setq txt (match-string 1))
+           (if (and scheduledp (not (string-match (regexp-opt 
org-done-keywords-for-agenda) txt)))
+               (throw :skip nil))
            (when extra
              (if (string-match "\\([ \t]+\\)\\(:[^ \n\t]*?:\\)[ \t]*$" txt)
                  (setq txt (concat (substring txt 0 (match-beginning 1))
@@ -4796,8 +4803,9 @@ be skipped."
            (setq txt (org-format-agenda-item
                       (cond
                        (closedp "Closed:    ")
-                           (statep (concat "State:     (" state ")"))
-                           (t (concat "Clocked:   (" clocked  ")")))
+                       (scheduledp "Scheduled:    ")
+                       (statep (concat "State:     (" state ")"))
+                       (t (concat "Clocked:   (" clocked  ")")))
                       txt category tags timestr)))
          (setq priority 100000)
          (org-add-props txt props

reply via email to

[Prev in Thread] Current Thread [Next in Thread]