From cc25d929f6eafeda89c75364068572d0aed3502d Mon Sep 17 00:00:00 2001 From: Thomas Morgan Date: Sun, 28 Jul 2013 17:43:19 +0200 Subject: [PATCH] Give priority to overdue habits that repeat more frequently. lisp/org-habit.el (org-habit-get-priority): Take into account the frequency of overdue habits. Weight those that repeat often higher than those that repeat infrequently. --- lisp/org-habit.el | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lisp/org-habit.el b/lisp/org-habit.el index eba9037..23713cf 100644 --- a/lisp/org-habit.el +++ b/lisp/org-habit.el @@ -230,20 +230,30 @@ This must take into account not just urgency, but consistency as well." (let ((pri 1000) (now (if moment (time-to-days moment) (org-today))) (scheduled (org-habit-scheduled habit)) - (deadline (org-habit-deadline habit))) + (deadline (org-habit-deadline habit)) + (s-repeat (org-habit-scheduled-repeat habit)) + (d-repeat (org-habit-deadline-repeat habit))) ;; add 10 for every day past the scheduled date, and subtract for every ;; day before it (setq pri (+ pri (* (- now scheduled) 10))) + ;; if overdue, add 20 for every time it would have been done if + ;; consistently performed on scheduled date + (when (< scheduled now) + (setq pri (+ pri (* (/ (- now scheduled) s-repeat) 20)))) ;; add 50 if the deadline is today (if (and (/= scheduled deadline) (= now deadline)) (setq pri (+ pri 50))) - ;; add 100 for every day beyond the deadline date, and subtract 10 for - ;; every day before it (let ((slip (- now (1- deadline)))) + ;; add 100 for every day beyond the deadline date, and subtract 10 for + ;; every day before it (if (> slip 0) (setq pri (+ pri (* slip 100))) - (setq pri (+ pri (* slip 10))))) + (setq pri (+ pri (* slip 10)))) + ;; if overdue, add 200 for every time it would have been done if + ;; consistently performed the day before deadline + (when (> slip 0) + (setq pri (+ pri (* (/ slip d-repeat) 200))))) pri)) (defun org-habit-get-faces (habit &optional now-days scheduled-days donep) -- 1.7.10.4