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:
Carsten Dominik 2010-06-22 16:14:55 +02:00
parent 80531d8d71
commit 80bcadf605
1 changed files with 9 additions and 7 deletions

View File

@ -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. the day, change that.
With prefix ARG, change by that many units." With prefix ARG, change by that many units."
(interactive "p") (interactive "p")
(org-timestamp-change (prefix-numeric-value arg))) (org-timestamp-change (prefix-numeric-value arg) nil 'updown))
(defun org-timestamp-down (&optional arg) (defun org-timestamp-down (&optional arg)
"Decrease the date item at the cursor by one. "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. the day, change that.
With prefix ARG, change by that many units." With prefix ARG, change by that many units."
(interactive "p") (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) (defun org-timestamp-up-day (&optional arg)
"Increase the date in the time stamp by one day. "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)) (if (and (not (org-at-timestamp-p t))
(org-on-heading-p)) (org-on-heading-p))
(org-todo 'up) (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) (defun org-timestamp-down-day (&optional arg)
"Decrease the date in the time stamp by one day. "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)) (if (and (not (org-at-timestamp-p t))
(org-on-heading-p)) (org-on-heading-p))
(org-todo 'down) (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) (defun org-at-timestamp-p (&optional inactive-ok)
"Determine if the cursor is in or at a timestamp." "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" (message "Timestamp is now %sactive"
(if (equal (char-after beg) ?<) "" "in"))))) (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. "Change the date in the time stamp at point.
The date will be changed by N times WHAT. WHAT can be `day', `month', 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 `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) (if (string-match "^.\\{10\\}.*?[0-9]+:[0-9][0-9]" ts)
(setq with-hm t)) (setq with-hm t))
(setq time0 (org-parse-time-string ts)) (setq time0 (org-parse-time-string ts))
(when (and (eq org-ts-what 'minute) (when (and updown
(eq current-prefix-arg nil)) (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)))) (setq n (* dm (cond ((> n 0) 1) ((< n 0) -1) (t 0))))
(when (not (= 0 (setq rem (% (nth 1 time0) dm)))) (when (not (= 0 (setq rem (% (nth 1 time0) dm))))
(setcar (cdr time0) (+ (nth 1 time0) (setcar (cdr time0) (+ (nth 1 time0)