Speed-up multiple calls to `org-diary'.
commita3f3efe82dab413fdf79644645b0eee318f96033
authorCarsten Dominik <carsten.dominik@gmail.com>
Mon, 29 Mar 2010 09:24:06 +0000 (29 11:24 +0200)
committerCarsten Dominik <carsten.dominik@gmail.com>
Mon, 29 Mar 2010 09:24:06 +0000 (29 11:24 +0200)
tree2b571f5d9a6ea7f5b1d193dac11ec9aa057f43ce
parentaed051cf8c390ffae5b16ac1e7de7ffbe6003fd8
Speed-up multiple calls to `org-diary'.

Patch by Matt Lundin

Matt writes:

> The missing piece of the puzzle is integration with "diary" and
> "cal-tex" functions via the org-diary sexp. I have found org-diary to be
> excruciatingly slow when called for anything more than a couple of days.
> I have the following line in my diary file:
>
> &%%(org-diary :timestamp :sexp)
>
> If I try to view 20 or so upcoming days in the diary by typing C-u 20 d
> on a date in the calendar, it can take upwards of 30 seconds to generate
> the diary display. This is of little consequence, since I can, after
> all, simply use the custom agenda command. But I often want to print out
> a nice LaTeX calendar of my appointments with cal-tex-cursor-month. And
> that takes upwards of 50 seconds (see attached elp-results file).
>
> Judging from the elp-results, the culprit seems to be
> org-prepare-agenda-buffers (46 seconds), which is called 31 times (once
> for each day). It seems to me that since org-diary is being called 31
> times in quick succession by the same function (diary-sexp-entry), one
> should only need to call org-prepare-agenda-buffers once.
>
> The only solution I could see to this problem was to add a test to see
> if org-diary had been called less than 1 second ago. Thus, I added the
> variable org-diary-last-run-time and a conditional in org-diary that
> only runs org-prepare-agenda-buffers if org-diary-last-run-time is less
> than 1 second in the past.
>
> With the patch, it now takes appr. 5 seconds to generate the LaTeX
> calendar with cal-tex and org-prepare-agenda-buffers is called only
> once.
lisp/ChangeLog
lisp/org-agenda.el