diff options
author | Matt Lundin <mdl@imapmail.org> | 2011-01-26 01:03:47 +0000 |
---|---|---|
committer | Carsten Dominik <carsten.dominik@gmail.com> | 2011-01-25 22:58:57 +0100 |
commit | c03c8f0e7cc5b8cb1268fe2f7663b6e197d6cb88 (patch) | |
tree | e41e27ea5304e2051fa330d0e1a3bf8791ba9b31 | |
parent | 8899e596f9b504104c2189df87d8faa63a0e9cd1 (diff) | |
download | org-mode-c03c8f0e7cc5b8cb1268fe2f7663b6e197d6cb88.tar.gz |
Optimize org-habit-parse-todo
* 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.
-rw-r--r-- | 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) |