From mboxrd@z Thu Jan 1 00:00:00 1970 From: Antoine Levitt Subject: 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 Message-ID: <87fwpxgfc5.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from [140.186.70.92] (port=44208 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Q73XU-0004Ig-7s for emacs-orgmode@gnu.org; Tue, 05 Apr 2011 06:31:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Q73XT-0002r6-1Y for emacs-orgmode@gnu.org; Tue, 05 Apr 2011 06:31:12 -0400 Received: from lo.gmane.org ([80.91.229.12]:37853) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Q73XS-0002qh-OF for emacs-orgmode@gnu.org; Tue, 05 Apr 2011 06:31:11 -0400 Received: from list by lo.gmane.org with local (Exim 4.69) (envelope-from ) id 1Q73XP-00011O-Mx for emacs-orgmode@gnu.org; Tue, 05 Apr 2011 12:31:07 +0200 Received: from portable48.ceremade.dauphine.fr ([193.48.71.48]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 05 Apr 2011 12:31:07 +0200 Received: from antoine.levitt by portable48.ceremade.dauphine.fr with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Tue, 05 Apr 2011 12:31:07 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain 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. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=org-log-scheduled.diff 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 --=-=-=--