Hi, Org people. Merely revisiting the Org mailing list after many days. Gosh! That list is fairly active! :-)
Quoting an earlier message of mine: > The manual, section "8.3.2 Repeated tasks", says: > Some tasks need to be repeated again and again. Org mode helps to > organize such tasks using a so-called repeater in a DEADLINE, SCHEDULED, > or plain timestamp. > Examples and directions given in the page are related to DEADLINE, and > a few words suggest that SCHEDULED works the same. But the page does > not say how one may handle repeaters with plain timestamps. I merely > would like to update them so they show the date for the next > iteration, a bit like command "t d" already does on a DEADLINE > repeater. For what it may be worth, I kludged this code for bumping the following repeated timestamps on the current line. I stole most of the code, and did not write much myself: (defun fp-org-bump-timestamp () ;; Adapted from (org.el) org-auto-repeat-maybe. (interactive) (save-excursion (beginning-of-line) (when (re-search-forward org-ts-regexp (line-end-position) t) (let ((ts (match-string 1)) (whata '(("h" . hour) ("d" . day) ("m" . month) ("y" . year))) n time) (when (string-match "\\([.+]\\)?\\(\\+[0-9]+\\)\\([hdwmy]\\)" ts) (setq n (string-to-number (match-string 2 ts)) what (match-string 3 ts)) (if (equal what "w") (setq n (* n 7) what "d")) (if (and (equal what "h") (not (string-match "[0-9]\\{1,2\\}:[0-9]\\{2\\}" ts))) (user-error "Cannot repeat in Repeat in %d hour(s) because no hour has been set" n)) ;; Preparation, see if we need to modify the start date for the change (when (match-end 1) (setq time (save-match-data (org-time-string-to-time ts))) (cond ((equal (match-string 1 ts) ".") ;; Shift starting date to today (org-timestamp-change (- (org-today) (time-to-days time)) 'day)) ((equal (match-string 1 ts) "+") (let ((nshiftmax 10) (nshift 0)) (while (or (= nshift 0) (<= (time-to-days time) (time-to-days (current-time)))) (when (= (incf nshift) nshiftmax) (or (y-or-n-p (message "%d repeater intervals were not enough to shift date past today. Continue? " nshift)) (error "Abort"))) (org-timestamp-change n (cdr (assoc what whata))) (org-at-timestamp-p t) (setq ts (match-string 1)) (setq time (save-match-data (org-time-string-to-time ts))))) (org-timestamp-change (- n) (cdr (assoc what whata))) ;; rematch, so that we have everything in place for the real shift (org-at-timestamp-p t) (setq ts (match-string 1)) (string-match "\\([.+]\\)?\\(\\+[0-9]+\\)\\([hdwmy]\\)" ts)))) (org-timestamp-change n (cdr (assoc what whata)) nil t))))))