summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2019-02-22 18:32:31 -0800
committerKyle Meyer <kyle@kyleam.com>2019-03-03 22:49:42 -0500
commita6cead0d21fc59aa93d97230e197633326406138 (patch)
treec0e851c4da53adf0c0956d5462848735c6a0f3d4
parent1b15d5ef8e5237582fde1b7230d148f31aa8fde2 (diff)
downloadorg-mode-a6cead0d21fc59aa93d97230e197633326406138.tar.gz
Backport commit 476066e89 from Emacsrelease_9.2.2
* lisp/org-clock.el (org-clock-out): * lisp/org.el (org-evaluate-time-range): Avoid double-rounding of time-related values. Simplify. * lisp/org-clock.el (org-resolve-clocks-if-idle): Use time-since instead of open-coding most of it. * lisp/org-agenda.el (org-agenda-show-clocking-issues): * lisp/org-capture.el (org-capture-set-target-location): * lisp/org-table.el (org-table-sum): * lisp/org.el (org-babel-load-file, org-2ft, org-time-stamp) (org-read-date-analyze, org-time-stamp-to-now): Simplify. Note(km): Many of the changes from 476066e89 have been dropped for compatibility with older Emacsen. Avoid some double-rounding of Lisp timestamps 476066e89d6f0bb87220da690b8a476bf9655b80 Paul Eggert Fri Feb 22 18:33:57 2019 -0800
-rw-r--r--lisp/org-agenda.el4
-rw-r--r--lisp/org-capture.el3
-rw-r--r--lisp/org-clock.el10
-rw-r--r--lisp/org-duration.el9
-rw-r--r--lisp/org-macs.el4
-rw-r--r--lisp/org-table.el4
-rw-r--r--lisp/org.el48
7 files changed, 37 insertions, 45 deletions
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 40de26c..572a42c 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -5879,12 +5879,12 @@ See also the user option `org-agenda-clock-consistency-checks'."
((> dt (* 60 maxtime))
;; a very long clocking chunk
(setq issue (format "Clocking interval is very long: %s"
- (org-duration-from-minutes (floor (/ dt 60.))))
+ (org-duration-from-minutes (floor dt 60)))
face (or (plist-get pl :long-face) face)))
((< dt (* 60 mintime))
;; a very short clocking chunk
(setq issue (format "Clocking interval is very short: %s"
- (org-duration-from-minutes (floor (/ dt 60.))))
+ (org-duration-from-minutes (floor dt 60)))
face (or (plist-get pl :short-face) face)))
((and (> tlend 0) (< ts tlend))
;; Two clock entries are overlapping
diff --git a/lisp/org-capture.el b/lisp/org-capture.el
index debf180..cb5b158 100644
--- a/lisp/org-capture.el
+++ b/lisp/org-capture.el
@@ -1003,8 +1003,7 @@ Store them in the capture property list."
(equal current-prefix-arg 1))
;; Prompt for date.
(let ((prompt-time (org-read-date
- nil t nil "Date for tree entry:"
- (current-time))))
+ nil t nil "Date for tree entry:")))
(org-capture-put
:default-time
(cond ((and (or (not (boundp 'org-time-was-given))
diff --git a/lisp/org-clock.el b/lisp/org-clock.el
index 8de232f..4a1956f 100644
--- a/lisp/org-clock.el
+++ b/lisp/org-clock.el
@@ -1169,8 +1169,7 @@ so long."
org-clock-marker (marker-buffer org-clock-marker))
(let* ((org-clock-user-idle-seconds (org-user-idle-seconds))
(org-clock-user-idle-start
- (time-subtract (current-time)
- (seconds-to-time org-clock-user-idle-seconds)))
+ (time-since (seconds-to-time org-clock-user-idle-seconds)))
(org-clock-resolving-clocks-due-to-idleness t))
(if (> org-clock-user-idle-seconds (* 60 org-clock-idle-time))
(org-clock-resolve
@@ -1179,9 +1178,8 @@ so long."
(lambda (_)
(format "Clocked in & idle for %.1f mins"
(/ (float-time
- (time-subtract (current-time)
- org-clock-user-idle-start))
- 60.0)))
+ (time-since org-clock-user-idle-start))
+ 60)))
org-clock-user-idle-start)))))
(defvar org-clock-current-task nil "Task currently clocked in.")
@@ -1600,7 +1598,7 @@ to, overriding the existing value of `org-clock-out-switch-to-state'."
;; Possibly remove zero time clocks. However, do not add
;; a note associated to the CLOCK line in this case.
(cond ((and org-clock-out-remove-zero-time-clocks
- (= (+ h m) 0))
+ (= 0 h m))
(setq remove t)
(delete-region (line-beginning-position)
(line-beginning-position 2)))
diff --git a/lisp/org-duration.el b/lisp/org-duration.el
index e93ef3f..e350bc7 100644
--- a/lisp/org-duration.el
+++ b/lisp/org-duration.el
@@ -316,11 +316,10 @@ When optional argument CANONICAL is non-nil, ignore
Raise an error if expected format is unknown."
(pcase (or fmt org-duration-format)
(`h:mm
- (let ((minutes (floor minutes)))
- (format "%d:%02d" (/ minutes 60) (mod minutes 60))))
+ (format "%d:%02d" (/ minutes 60) (mod minutes 60)))
(`h:mm:ss
(let* ((whole-minutes (floor minutes))
- (seconds (floor (* 60 (- minutes whole-minutes)))))
+ (seconds (mod (* 60 minutes) 60)))
(format "%s:%02d"
(org-duration-from-minutes whole-minutes 'h:mm)
seconds)))
@@ -401,9 +400,7 @@ Raise an error if expected format is unknown."
(pcase-let* ((`(,unit . ,required?) units)
(modifier (org-duration--modifier unit canonical)))
(cond ((<= modifier minutes)
- (let ((value (if (integerp modifier)
- (/ (floor minutes) modifier)
- (floor (/ minutes modifier)))))
+ (let ((value (floor minutes modifier)))
(cl-decf minutes (* value modifier))
(format " %d%s" value unit)))
(required? (concat " 0" unit))
diff --git a/lisp/org-macs.el b/lisp/org-macs.el
index 4658d57..eaf65a7 100644
--- a/lisp/org-macs.el
+++ b/lisp/org-macs.el
@@ -1082,8 +1082,8 @@ nil, just return 0."
((stringp s)
(condition-case nil
(float-time (apply #'encode-time (org-parse-time-string s)))
- (error 0.)))
- (t 0.)))
+ (error 0)))
+ (t 0)))
(defun org-time= (a b)
(let ((a (org-2ft a))
diff --git a/lisp/org-table.el b/lisp/org-table.el
index 0790387..d13a2c3 100644
--- a/lisp/org-table.el
+++ b/lisp/org-table.el
@@ -2198,8 +2198,8 @@ If NLAST is a number, only the NLAST fields will actually be summed."
(sres (if (= org-timecnt 0)
(number-to-string res)
(setq diff (* 3600 res)
- h (floor (/ diff 3600)) diff (mod diff 3600)
- m (floor (/ diff 60)) diff (mod diff 60)
+ h (floor diff 3600) diff (mod diff 3600)
+ m (floor diff 60) diff (mod diff 60)
s diff)
(format "%.0f:%02.0f:%02.0f" h m s))))
(kill-new sres)
diff --git a/lisp/org.el b/lisp/org.el
index 87b9120..f4fe64b 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -253,10 +253,10 @@ file to byte-code before it is loaded."
(interactive "fFile to load: \nP")
(let* ((age (lambda (file)
(float-time
- (time-subtract (current-time)
- (file-attribute-modification-time
- (or (file-attributes (file-truename file))
- (file-attributes file)))))))
+ (time-since
+ (file-attribute-modification-time
+ (or (file-attributes (file-truename file))
+ (file-attributes file)))))))
(base-name (file-name-sans-extension file))
(exported-file (concat base-name ".el")))
;; tangle if the Org file is newer than the elisp file
@@ -16049,8 +16049,8 @@ non-nil."
((org-at-timestamp-p 'lax) (match-string 0))))
;; Default time is either the timestamp at point or today.
;; When entering a range, only the range start is considered.
- (default-time (if (not ts) (current-time)
- (apply #'encode-time (org-parse-time-string ts))))
+ (default-time (and ts
+ (apply #'encode-time (org-parse-time-string ts))))
(default-input (and ts (org-get-compact-tod ts)))
(repeater (and ts
(string-match "\\([.+-]+[0-9]+[hdwmy] ?\\)+" ts)
@@ -16058,13 +16058,13 @@ non-nil."
org-time-was-given
org-end-time-was-given
(time
- (and (if (equal arg '(16)) (current-time)
- ;; Preserve `this-command' and `last-command'.
- (let ((this-command this-command)
- (last-command last-command))
- (org-read-date
- arg 'totime nil nil default-time default-input
- inactive))))))
+ (if (equal arg '(16)) (current-time)
+ ;; Preserve `this-command' and `last-command'.
+ (let ((this-command this-command)
+ (last-command last-command))
+ (org-read-date
+ arg 'totime nil nil default-time default-input
+ inactive)))))
(cond
((and ts
(memq last-command '(org-time-stamp org-time-stamp-inactive))
@@ -16434,7 +16434,7 @@ user."
(when (string-match "\\`[ \t]*\\.[ \t]*\\'" ans)
(setq ans "+0"))
- (when (setq delta (org-read-date-get-relative ans (current-time) org-def))
+ (when (setq delta (org-read-date-get-relative ans nil org-def))
(setq ans (replace-match "" t t ans)
deltan (car delta)
deltaw (nth 1 delta)
@@ -16782,7 +16782,7 @@ Don't touch the rest."
If SECONDS is non-nil, return the difference in seconds."
(let ((fdiff (if seconds #'float-time #'time-to-days)))
(- (funcall fdiff (org-time-string-to-time timestamp-string))
- (funcall fdiff (current-time)))))
+ (funcall fdiff nil))))
(defun org-deadline-close-p (timestamp-string &optional ndays)
"Is the time in TIMESTAMP-STRING close to the current date?"
@@ -16964,10 +16964,8 @@ days in order to avoid rounding problems."
(match-end (match-end 0))
(time1 (org-time-string-to-time ts1))
(time2 (org-time-string-to-time ts2))
- (t1 (float-time time1))
- (t2 (float-time time2))
- (diff (abs (- t2 t1)))
- (negative (< (- t2 t1) 0))
+ (diff (abs (float-time (time-subtract time2 time1))))
+ (negative (time-less-p time2 time1))
;; (ys (floor (* 365 24 60 60)))
(ds (* 24 60 60))
(hs (* 60 60))
@@ -16978,14 +16976,14 @@ days in order to avoid rounding problems."
(fh "%02d:%02d")
y d h m align)
(if havetime
- (setq ; y (floor (/ diff ys)) diff (mod diff ys)
+ (setq ; y (floor diff ys) diff (mod diff ys)
y 0
- d (floor (/ diff ds)) diff (mod diff ds)
- h (floor (/ diff hs)) diff (mod diff hs)
- m (floor (/ diff 60)))
- (setq ; y (floor (/ diff ys)) diff (mod diff ys)
+ d (floor diff ds) diff (mod diff ds)
+ h (floor diff hs) diff (mod diff hs)
+ m (floor diff 60))
+ (setq ; y (floor diff ys) diff (mod diff ys)
y 0
- d (floor (+ (/ diff ds) 0.5))
+ d (round diff ds)
h 0 m 0))
(if (not to-buffer)
(message "%s" (org-make-tdiff-string y d h m))