emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* org-agenda-log-mode doesn't list past scheduled items if org-agenda-skip-scheduled-if-done is t
@ 2011-04-05 10:30 Antoine Levitt
  2011-05-02  9:20 ` Carsten Dominik
  0 siblings, 1 reply; 11+ messages in thread
From: Antoine Levitt @ 2011-04-05 10:30 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 839 bytes --]

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.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: org-log-scheduled.diff --]
[-- Type: text/x-diff, Size: 3482 bytes --]

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

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2011-05-11 13:01 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-05 10:30 org-agenda-log-mode doesn't list past scheduled items if org-agenda-skip-scheduled-if-done is t Antoine Levitt
2011-05-02  9:20 ` Carsten Dominik
2011-05-02  9:52   ` Antoine Levitt
2011-05-02 12:07     ` Carsten Dominik
2011-05-02 12:09       ` Antoine Levitt
2011-05-02 14:53       ` Sébastien Vauban
2011-05-02 15:02       ` Antoine Levitt
2011-05-02 15:22         ` Matt Lundin
2011-05-02 15:35           ` Antoine Levitt
2011-05-02 15:54             ` Matt Lundin
2011-05-11 13:01               ` Antoine Levitt

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).