emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] Giving priority to overdue habits that repeat more frequently


From: Thomas Morgan
Subject: [O] Giving priority to overdue habits that repeat more frequently
Date: Sat, 26 Oct 2013 16:06:11 +0200

Dear Org mode hackers,

Here is a patch to give priority to overdue habits that repeat more
frequently.  The number of times a habit would have been done if it
had always been on time is made a factor in its urgency score.  I'm
not sure if this is true for everyone but my more frequently repeating
habits are generally the ones I give priority to, so this behavior seems
to fit.

Thanks,
Thomas

>From cc25d929f6eafeda89c75364068572d0aed3502d Mon Sep 17 00:00:00 2001
From: Thomas Morgan <address@hidden>
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


reply via email to

[Prev in Thread] Current Thread [Next in Thread]