From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Lundin Subject: Re: [PATCH] Optimize org-habit-parse-todo Date: Tue, 25 Jan 2011 15:03:47 -0500 Message-ID: <87sjwgn42k.fsf@fastmail.fm> References: <87mxmxys27.fsf@fastmail.fm> <3410A977-FA48-4EF3-9868-13A932FFD1DB@gmail.com> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from [140.186.70.92] (port=55910 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Php7V-0003oH-6S for emacs-orgmode@gnu.org; Tue, 25 Jan 2011 15:04:07 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Php7G-0001EQ-49 for emacs-orgmode@gnu.org; Tue, 25 Jan 2011 15:03:51 -0500 Received: from out1.smtp.messagingengine.com ([66.111.4.25]:51397) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Php7G-0001EA-1R for emacs-orgmode@gnu.org; Tue, 25 Jan 2011 15:03:50 -0500 In-Reply-To: <3410A977-FA48-4EF3-9868-13A932FFD1DB@gmail.com> (Carsten Dominik's message of "Tue, 25 Jan 2011 07:21:49 +0100") 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: Carsten Dominik Cc: Org Mode * lisp/org-habit.el: (org-habit-parse-todo) Don't parse more days than needed. When constructing a consistency graph, org-habit now stops searching for timestamps when the number of matches exceeds the span of time displayed in the graph. This can lead to a significant speedup in agenda construction, especially for entries with many logbook entries. Previously, org-habit would parse all logbook timestamps, even if they numbered in the hundreds. --- lisp/org-habit.el | 16 ++++++++++++---- 1 files changed, 12 insertions(+), 4 deletions(-) diff --git a/lisp/org-habit.el b/lisp/org-habit.el index b174a1f..5d2514a 100644 --- a/lisp/org-habit.el +++ b/lisp/org-habit.el @@ -170,10 +170,18 @@ This list represents a \"habit\" for the rest of this module." habit-entry scheduled-repeat)) (setq deadline (+ scheduled (- dr-days sr-days)))) (org-back-to-heading t) - (while (re-search-forward "- State \"DONE\".*\\[\\([^]]+\\)\\]" end t) - (push (time-to-days - (org-time-string-to-time (match-string-no-properties 1))) - closed-dates)) + (let* ((maxdays (+ org-habit-preceding-days org-habit-following-days)) + (reversed org-log-states-order-reversed) + (search (if reversed 're-search-forward 're-search-backward)) + (limit (if reversed end (point))) + (count 0)) + (unless reversed (goto-char end)) + (while (and (< count maxdays) + (funcall search "- State \"DONE\".*\\[\\([^]]+\\)\\]" limit t)) + (push (time-to-days + (org-time-string-to-time (match-string-no-properties 1))) + closed-dates) + (setq count (1+ count)))) (list scheduled sr-days deadline dr-days closed-dates)))) (defsubst org-habit-scheduled (habit) -- 1.7.3.5 Carsten Dominik writes: > On Jan 25, 2011, at 7:01 AM, Carsten Dominik wrote: > >> Hi Matt >> >> Hmmm, >> >> this looks like a very important optimisation indeed. >> I am just wondering if it is always safe to do it like >> this. Have you checked if this is influenced by >> org-reverse-notes-order or similar things? > > I am sorry, I see now that this is done correctly. > One request, can you resubmit and test for the count > first, before doing the search? Just another very > minor optimization. Thanks Carsten! See the updated patch above. The next step is to make the keyword search configurable.... Best, Matt