Fix behavior of org-timestamp-change for explicit number of day changes
* lisp/org.el (org-timestamp-change): New optional argument UPDOWN. Use this to identify calls from org-timestamp-up/down, so that we can skip by rounding minutes in this case. (org-timestamp-up): (org-timestamp-down): (org-timestamp-up-day): (org-timestamp-down-day): Call org-timestamp-change with the updown argument. This function used to look only if there was a prefix argument in the current interactive call. Now we have an explicit marker indicating that the function is called from the updown commands.
This commit is contained in:
parent
80531d8d71
commit
80bcadf605
16
lisp/org.el
16
lisp/org.el
|
@ -14887,7 +14887,7 @@ If the cursor is on the year, change the year. If it is on the month or
|
|||
the day, change that.
|
||||
With prefix ARG, change by that many units."
|
||||
(interactive "p")
|
||||
(org-timestamp-change (prefix-numeric-value arg)))
|
||||
(org-timestamp-change (prefix-numeric-value arg) nil 'updown))
|
||||
|
||||
(defun org-timestamp-down (&optional arg)
|
||||
"Decrease the date item at the cursor by one.
|
||||
|
@ -14895,7 +14895,7 @@ If the cursor is on the year, change the year. If it is on the month or
|
|||
the day, change that.
|
||||
With prefix ARG, change by that many units."
|
||||
(interactive "p")
|
||||
(org-timestamp-change (- (prefix-numeric-value arg))))
|
||||
(org-timestamp-change (- (prefix-numeric-value arg)) nil 'updown))
|
||||
|
||||
(defun org-timestamp-up-day (&optional arg)
|
||||
"Increase the date in the time stamp by one day.
|
||||
|
@ -14904,7 +14904,7 @@ With prefix ARG, change that many days."
|
|||
(if (and (not (org-at-timestamp-p t))
|
||||
(org-on-heading-p))
|
||||
(org-todo 'up)
|
||||
(org-timestamp-change (prefix-numeric-value arg) 'day)))
|
||||
(org-timestamp-change (prefix-numeric-value arg) 'day 'updown)))
|
||||
|
||||
(defun org-timestamp-down-day (&optional arg)
|
||||
"Decrease the date in the time stamp by one day.
|
||||
|
@ -14913,7 +14913,7 @@ With prefix ARG, change that many days."
|
|||
(if (and (not (org-at-timestamp-p t))
|
||||
(org-on-heading-p))
|
||||
(org-todo 'down)
|
||||
(org-timestamp-change (- (prefix-numeric-value arg)) 'day)))
|
||||
(org-timestamp-change (- (prefix-numeric-value arg)) 'day) 'updown))
|
||||
|
||||
(defun org-at-timestamp-p (&optional inactive-ok)
|
||||
"Determine if the cursor is in or at a timestamp."
|
||||
|
@ -14958,7 +14958,7 @@ With prefix ARG, change that many days."
|
|||
(message "Timestamp is now %sactive"
|
||||
(if (equal (char-after beg) ?<) "" "in")))))
|
||||
|
||||
(defun org-timestamp-change (n &optional what)
|
||||
(defun org-timestamp-change (n &optional what updown)
|
||||
"Change the date in the time stamp at point.
|
||||
The date will be changed by N times WHAT. WHAT can be `day', `month',
|
||||
`year', `minute', `second'. If WHAT is not given, the cursor position
|
||||
|
@ -14989,8 +14989,10 @@ in the timestamp determines what will be changed."
|
|||
(if (string-match "^.\\{10\\}.*?[0-9]+:[0-9][0-9]" ts)
|
||||
(setq with-hm t))
|
||||
(setq time0 (org-parse-time-string ts))
|
||||
(when (and (eq org-ts-what 'minute)
|
||||
(eq current-prefix-arg nil))
|
||||
(when (and updown
|
||||
(eq org-ts-what 'minute)
|
||||
(not current-prefix-arg))
|
||||
;; This looks like s-up and s-down. Change by one rounding step.
|
||||
(setq n (* dm (cond ((> n 0) 1) ((< n 0) -1) (t 0))))
|
||||
(when (not (= 0 (setq rem (% (nth 1 time0) dm))))
|
||||
(setcar (cdr time0) (+ (nth 1 time0)
|
||||
|
|
Loading…
Reference in New Issue