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.
This commit is contained in:
parent
8899e596f9
commit
c03c8f0e7c
1 changed files with 12 additions and 4 deletions
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue