emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [Orgmode] Re: monthly report


From: Carsten Dominik
Subject: Re: [Orgmode] Re: monthly report
Date: Wed, 18 Mar 2009 09:42:20 +0100


On Mar 17, 2009, at 8:38 PM, Micah Anderson wrote:


Hi all, apologies for resurrecting an older thread, but I was searching
for this very capability and found this post.

Carsten Dominik <address@hidden> writes:
On May 25, 2007, at 3:41, Steven Lumos wrote:

Being yet another planner switcher, I'm used to using planner- report- generate to assist me with writing a monthly activity report. I don't need fine-grained time tracking, or even most of what planner- report- generate does--it would be ideal to get just a list of TODOs that were
closed between two dates and then I'll look at it while I type a few
sentences in an email buffer.

Is there already an easy way to "get a list" (I guess that a sparse
tree would be most convenient for me) of TODOs marked as closed within
some date range?

I have been trying to figure this one out myself. Thank goodness for
list archives!

You can use org-occur to create a tree with matches of CLOSED time
stamps.
And you can use the callback argument of org-occur to verify if a
match is in a given time interval.  Something like this:

(defun org-closed-in-range ()
 "Sparse treee of items closed in a certain time range."
 (interactive)
 ;; Get the time interval from the user.
 (let* ((time1 (time-to-seconds
                (org-read-date nil 'to-time nil "Starting date: ")))
        (time2 (time-to-seconds
                (org-read-date nil 'to-time nil "End date:")))
        ;; callbakc function
        (callback (lambda ()
                    (let ((time
                           (time-to-seconds
                            (apply 'encode-time
                                   (org-parse-time-string
                                    (match-string 1))))))
                      ;; check if time in interval
                      (and (>= time time1) (<= time time2))))))
   ;; make tree, check each match with the callback
   (org-occur "CLOSED: +\\[\\(.*?\\)\\]" nil callback)))

Ok, I tried this and I'm not sure what it did, if anything. I get the
mini-buffer saying, 'Specified time is not representable' I've tried
various date range possibilities, and can't get it to work.

It seems that you are specifying the date in an invalid way.
What are you typing when prompted for a date?

- Carsten


I did also change the '(org-occur "CLOSED: +\\[\\(.*?\\)\\]" nil
callback)))' to be instead '(org-occur "DONE +\\[\\(.*?\\)\\]" nil
callback)))' due to the way my org seems to represent finished items:

** DONE fix the apt puppet module to automatically add apt-keys, publish that new repository and deploy
  SCHEDULED: <2009-03-16 Mon>
  - State "DONE"       [2009-03-16 Mon 14:49] \\
    made this a lot nicer
  CLOCK: [2009-03-16 Mon 14:21]--[2009-03-16 Mon 14:21] =>  0:00
  [2009-03-16 Mon]

As far as I can tell, I did not setup this format. I tried to change the
(org-occur "CLOSED... to be "DONE..." instead, but no change here
either.

Thanks for any help!
micah



_______________________________________________
Emacs-orgmode mailing list
Remember: use `Reply All' to send replies to the list.
address@hidden
http://lists.gnu.org/mailman/listinfo/emacs-orgmode





reply via email to

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