From b1353cb6f83704167b9e3145f67793e90caba7ad Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Wed, 22 Feb 2017 19:34:44 +0100 Subject: [PATCH] org-duration: Fix bug with decimal units * lisp/org-duration.el (org-duration-to-minutes): Fix bug where the same unit with a decimal unit would be matched multiple times. * testing/lisp/test-org-duration.el (test-org-duration/to-minutes): Fix test. --- lisp/org-duration.el | 5 +++-- testing/lisp/test-org-duration.el | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lisp/org-duration.el b/lisp/org-duration.el index f1288187c..f4e08d252 100644 --- a/lisp/org-duration.el +++ b/lisp/org-duration.el @@ -285,8 +285,9 @@ not recognized." (+ (/ (or seconds 0) 60.0) minutes (* 60 hours)))) ((string-match-p org-duration--full-re duration) (let ((minutes 0) - (s -1)) - (while (setq s (string-match org-duration--unit-re duration (1+ s))) + (s 0)) + (while (string-match org-duration--unit-re duration s) + (setq s (match-end 0)) (let ((value (string-to-number (match-string 1 duration))) (unit (match-string 2 duration))) (cl-incf minutes (* value (org-duration--modifier unit canonical))))) diff --git a/testing/lisp/test-org-duration.el b/testing/lisp/test-org-duration.el index c7b82661b..d9aca17b5 100644 --- a/testing/lisp/test-org-duration.el +++ b/testing/lisp/test-org-duration.el @@ -30,7 +30,7 @@ (should (= (org-duration-to-minutes "1:20:30") 80.5)) (should (= (org-duration-to-minutes "2h 10min") 130)) (should (= (org-duration-to-minutes "1d 1:02") 1502)) - (should (= (org-duration-to-minutes "2.5h") 450)) + (should (= (org-duration-to-minutes "2.5h") 150)) ;; Special case: a bare number is treated as minutes. (should (= (org-duration-to-minutes "2") 2)) (should (= (org-duration-to-minutes "2.5") 2.5)) -- 2.11.4.GIT