OK I guess in fact I'm 1. supposed to attach the patches (?) and 2. they contain hashes so I guess I should reattach them all together, having changed the first. Here they are. Sorry, I'm new to this email workflow.
The new thing here since Nicolas reviewed this last year (apart from applying changes in response to review feedback) is "greying out" habits that you just did, by applying face 'org-agenda-done when a habit is scheduled for the future. On Sun, 3 Feb 2019, at 16:03, John Lee wrote: > * lisp/org-habit.el (org-habit-scheduled-past-days): New variable > > * lisp/org-agenda.el (org-agenda-get-scheduled): override > `org-scheduled-past-days' for habits if > `org-habit-scheduled-past-days` is not nil > > TINYCHANGE > --- > lisp/org-agenda.el | 4 +++- > lisp/org-habit.el | 15 +++++++++++++++ > 2 files changed, 18 insertions(+), 1 deletion(-) > > diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el > index 489ecec95..784a555a9 100644 > --- a/lisp/org-agenda.el > +++ b/lisp/org-agenda.el > @@ -90,6 +90,7 @@ > (defvar org-habit-show-habits) > (defvar org-habit-show-habits-only-for-today) > (defvar org-habit-show-all-today) > +(defvar org-habit-scheduled-past-days) > > ;; Defined somewhere in this file, but used before definition. > (defvar org-agenda-buffer-name "*Org Agenda*") > @@ -6201,7 +6202,8 @@ scheduled items with an hour specification like > [h]h:mm." > habitp > (bound-and-true-p org-habit-show-all-today)) > (when (or (and (> ddays 0) (< diff ddays)) > - (> diff org-scheduled-past-days) > + (> diff (or (and habitp org-habit-scheduled-past-days) > + org-scheduled-past-days)) > (> schedule current) > (and (/= current schedule) > (/= current today) > diff --git a/lisp/org-habit.el b/lisp/org-habit.el > index af4520729..88df38ce0 100644 > --- a/lisp/org-habit.el > +++ b/lisp/org-habit.el > @@ -89,6 +89,21 @@ It will be green even if it was done after the deadline." > :group 'org-habit > :type 'boolean) > > +(defcustom org-habit-scheduled-past-days nil > +"Value to use instead of `org-scheduled-past-days', for habits only. > + > +If nil, `org-scheduled-past-days' is used. > + > +Setting this to say 10000 is a way to make habits always show up > +as a reminder, even if you set `org-scheduled-past-days' to a > +small value because you regard scheduled items as a way of > +\"turning on\" TODO items on a particular date, rather than as a > +means of creating calendar-based reminders." > + :group 'org-habit > + :type '(choice integer (const nil)) > + :package-version '(Org . "9.3") > + :safe (lambda (v) (or (integerp v) (null v)))) > + > (defface org-habit-clear-face > '((((background light)) (:background "#8270f9")) > (((background dark)) (:background "blue"))) > -- > 2.17.1 > >
From 81a56b4b2fd8bfa92695a8386158f6e03584f948 Mon Sep 17 00:00:00 2001 From: John Lee <j...@pobox.com> Date: Sun, 3 Feb 2019 12:35:39 +0000 Subject: [PATCH 1/3] org-habit: Add org-habit-scheduled-past-days * lisp/org-habit.el (org-habit-scheduled-past-days): New variable * lisp/org-agenda.el (org-agenda-get-scheduled): override `org-scheduled-past-days' for habits if `org-habit-scheduled-past-days` is not nil TINYCHANGE --- lisp/org-agenda.el | 4 +++- lisp/org-habit.el | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 489ecec95..784a555a9 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -90,6 +90,7 @@ (defvar org-habit-show-habits) (defvar org-habit-show-habits-only-for-today) (defvar org-habit-show-all-today) +(defvar org-habit-scheduled-past-days) ;; Defined somewhere in this file, but used before definition. (defvar org-agenda-buffer-name "*Org Agenda*") @@ -6201,7 +6202,8 @@ scheduled items with an hour specification like [h]h:mm." habitp (bound-and-true-p org-habit-show-all-today)) (when (or (and (> ddays 0) (< diff ddays)) - (> diff org-scheduled-past-days) + (> diff (or (and habitp org-habit-scheduled-past-days) + org-scheduled-past-days)) (> schedule current) (and (/= current schedule) (/= current today) diff --git a/lisp/org-habit.el b/lisp/org-habit.el index af4520729..88df38ce0 100644 --- a/lisp/org-habit.el +++ b/lisp/org-habit.el @@ -89,6 +89,21 @@ It will be green even if it was done after the deadline." :group 'org-habit :type 'boolean) +(defcustom org-habit-scheduled-past-days nil +"Value to use instead of `org-scheduled-past-days', for habits only. + +If nil, `org-scheduled-past-days' is used. + +Setting this to say 10000 is a way to make habits always show up +as a reminder, even if you set `org-scheduled-past-days' to a +small value because you regard scheduled items as a way of +\"turning on\" TODO items on a particular date, rather than as a +means of creating calendar-based reminders." + :group 'org-habit + :type '(choice integer (const nil)) + :package-version '(Org . "9.3") + :safe (lambda (v) (or (integerp v) (null v)))) + (defface org-habit-clear-face '((((background light)) (:background "#8270f9")) (((background dark)) (:background "blue"))) -- 2.17.1
From 5a0ca7b27985aafd10447aa24089b7f5782e4c9c Mon Sep 17 00:00:00 2001 From: John Lee <j...@pobox.com> Date: Sun, 3 Feb 2019 12:36:03 +0000 Subject: [PATCH 2/3] org-habit: Always show time of day designation for habits * org-agenda.el (org-agenda-get-scheduled): Always show the time of day designation for habits TINYCHANGE --- lisp/org-agenda.el | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 784a555a9..203c1e9d4 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -6257,9 +6257,17 @@ scheduled items with an hour specification like [h]h:mm." (head (buffer-substring (point) (line-end-position))) (time (cond - ;; No time of day designation if it is only - ;; a reminder. - ((and (/= current schedule) (/= current repeat)) nil) + ;; No time of day designation if it is only a + ;; reminder, except for habits, which always show + ;; the time of day. Habits are an exception + ;; because if there is a time of day, that is + ;; interpreted to mean they should usually happen + ;; then, even if doing the habit was missed. + ((and + (not habitp) + (/= current schedule) + (/= current repeat)) + nil) ((string-match " \\([012]?[0-9]:[0-9][0-9]\\)" s) (concat (substring s (match-beginning 1)) " ")) (t 'time))) -- 2.17.1
From c2d4b66876f025e9b2cf46f9e95e58d7f2b5373a Mon Sep 17 00:00:00 2001 From: John Lee <j...@pobox.com> Date: Mon, 26 Nov 2018 13:08:20 +0000 Subject: [PATCH 3/3] org-habit: Use face 'org-agenda-done for habits scheduled for future * lisp/org-agenda.el (org-agenda-get-scheduled): Use the face. This has the effect that if you just did the habit, it is "greyed out" in the agenda. TINYCHANGE --- lisp/org-agenda.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 203c1e9d4..2765718ac 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -6165,6 +6165,7 @@ scheduled items with an hour specification like [h]h:mm." (diff (- current schedule)) (warntime (get-text-property (point) 'org-appt-warntime)) (pastschedp (< schedule today)) + (futureschedp (> schedule today)) (habitp (and (fboundp 'org-is-habit-p) (org-is-habit-p))) (suppress-delay (let ((deadline (and org-agenda-skip-scheduled-delay-if-deadline @@ -6281,6 +6282,8 @@ scheduled items with an hour specification like [h]h:mm." head level category tags time nil habitp)) (face (cond ((and (not habitp) pastschedp) 'org-scheduled-previously) + ((and habitp futureschedp) + 'org-agenda-done) (todayp 'org-scheduled-today) (t 'org-scheduled))) (habitp (and habitp (org-habit-parse-todo)))) -- 2.17.1