On 12/3/19 1:03 AM, Justin Vallon wrote:
> Newbie org-mode user.  Wondering about some odd recurrence behavior.
...
> My understanding of .+TERM is that the new scheduled time should be now
> + term.  However, from this instance and testing with other terms, it
> seems to be "current date + scheduled-time" + HOURS.  Completing again
> advances the time by one hour, leaving the date as today.
> 
> For ".+2d", the new scheduled date/time is 2d away (at the same time),
> and re-completing does not change the new schedule time.

Following up with a patch to make .+1h work "like" .+1d:

- When computing the new scheduled date, the repeater-type "." would
shift the scheduled date to today, then adjust by the interval.
Shifting the date would leave the time unchanged
- When shifting by hours, the old time would remain, and then be shifted
by the interval
- With the patch, ".+1h" will shift schedule-date to now (vs today),
then add "1h" as before.  ".+1d" will have the old behavior (shift date,
but leave time alone).
- That is:
  - ".+1d" is tomorrow at same scheduled time
  - ".+1h" is in one hour
  - ".+24h" is 24h from now.

I would argue that the old behavior is broken (".+1h" advances the
schedule time by an hour), so retaining the old behavior is not useful
(ie: no option is required).

Changes:

- org-timestamp-change: Add a 'now tag to set the current time to now
- org-auto-repeat-maybe: if interval is '.+Nh', relative time is "now"
(instead of today)

"now" might be usable when the interval is days, but I am not sure about
the difference between (org-today) and (current-time) (ie: they seem
different), so the patch only applies for intervals of hours.

Patch is relative to org 9.3.

-- 
-Justin
justinval...@gmail.com
--- org.el      2019/12/07 15:36:31     1.1
+++ org.el      2019/12/07 15:37:15
@@ -10824,9 +10824,14 @@
                        (repeater-type (match-string 1 ts)))
                    (cond
                     ((equal "." repeater-type)
-                     ;; Shift starting date to today.
-                     (org-timestamp-change (- (org-today) (time-to-days time))
-                                           'day))
+                     (cond
+                      ((equal what "h")
+                       ;; adjust timestamp to now
+                       (org-timestamp-change 0 'now))
+                      (t
+                       ;; Shift starting date to today.
+                       (org-timestamp-change (- (org-today) (time-to-days 
time))
+                                             'day))))
                     ((equal "+" repeater-type)
                      (let ((nshiftmax 10)
                            (nshift 0))
@@ -15349,6 +15354,8 @@
          (setcar (nthcdr 1 time0) (or (nth 1 time0) 0))
          (setcar (nthcdr 2 time0) (or (nth 2 time0) 0))
          (setq time (apply 'encode-time time0))))
+      (when (eq what 'now)
+       (setq time (current-time)))
       ;; Insert the new time-stamp, and ensure point stays in the same
       ;; category as before (i.e. not after the last position in that
       ;; category).

Reply via email to