|
@@ -191,6 +191,33 @@ This list represents a \"habit\" for the rest of this module."
|
|
|
(defsubst org-habit-done-dates (habit)
|
|
|
(nth 4 habit))
|
|
|
|
|
|
+(defsubst org-habit-get-priority (habit)
|
|
|
+ "Determine the relative priority of a habit.
|
|
|
+This must take into account not just urgency, but consistency as well."
|
|
|
+ (let ((pri 1000)
|
|
|
+ (days (time-to-days
|
|
|
+ (time-subtract (current-time)
|
|
|
+ (list 0 (* 3600 org-extend-today-until) 0))))
|
|
|
+ (s-days (time-to-days (org-habit-scheduled habit)))
|
|
|
+ (d-days (time-to-days (org-habit-deadline habit))))
|
|
|
+ ;; add 10 for every day past the scheduled date, and subtract for every
|
|
|
+ ;; day before it
|
|
|
+ (let ((slip (- days s-days)))
|
|
|
+ (if (> slip 0)
|
|
|
+ (setq pri (+ pri (* slip 10)))
|
|
|
+ (setq pri (+ pri (* slip 10)))))
|
|
|
+ ;; add 20 for every day beyond the deadline date, and subtract 5 for every
|
|
|
+ ;; day before it
|
|
|
+ (if (/= s-days d-days)
|
|
|
+ ;; add 100 if the deadline is today
|
|
|
+ (if (= days d-days)
|
|
|
+ (setq pri (+ pri 100))))
|
|
|
+ (let ((slip (- days d-days)))
|
|
|
+ (if (> slip 0)
|
|
|
+ (setq pri (+ pri (* slip 20)))
|
|
|
+ (setq pri (+ pri (* slip 5)))))
|
|
|
+ pri))
|
|
|
+
|
|
|
(defun org-habit-get-faces (habit &optional moment scheduled-time donep)
|
|
|
"Return faces for HABIT relative to MOMENT and SCHEDULED-TIME.
|
|
|
MOMENT defaults to the current time if it is nil.
|