diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 402fc8e52..66865ffe1 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -672,9 +672,6 @@ It used to be ~@samp~ but ~@asis~ is neutral and, therefore, more suitable as a default value. *** Texinfo default process includes ~--no-split~ option *** New entities : ~\dollar~ and ~\USD~ -*** ~org-parse-time-string~ accepts a new optional argument -=ZONE= specifies the current time zone. -*** ~org-time-string-to-seconds~ now accepts an optional =ZONE= argument *** Support for date style URLs in =org-protocol://open-source= URLs like =https://cool-blog.com/2017/05/20/cool-post/= are covered by rewrite rules. diff --git a/lisp/ob-gnuplot.el b/lisp/ob-gnuplot.el index 763386270..b0743f604 100644 --- a/lisp/ob-gnuplot.el +++ b/lisp/ob-gnuplot.el @@ -40,7 +40,7 @@ ;;; Code: (require 'ob) -(declare-function org-time-string-to-time "org" (s &optional zone)) +(declare-function org-time-string-to-time "org" (s)) (declare-function org-combine-plists "org" (&rest plists)) (declare-function orgtbl-to-generic "org-table" (table params)) (declare-function gnuplot-mode "ext:gnuplot-mode" ()) diff --git a/lisp/org-clock.el b/lisp/org-clock.el index 83d0e1299..0e7eb2149 100644 --- a/lisp/org-clock.el +++ b/lisp/org-clock.el @@ -1467,7 +1467,7 @@ The time is always returned as UTC." (and (or (not cmt) (equal cmt "auto")) lr)) (setq org--msg-extra "showing task time since last repeat.") - (and lr (org-time-string-to-time lr t))) + (and lr (org-time-string-to-time lr))) (t nil)))) (defun org-clock-find-position (find-unclosed) @@ -1604,9 +1604,9 @@ to, overriding the existing value of `org-clock-out-switch-to-state'." (insert "--") (setq te (org-insert-time-stamp (or at-time now) 'with-hm 'inactive)) (setq s (- (float-time - (apply #'encode-time (org-parse-time-string te nil t))) + (apply #'encode-time (org-parse-time-string te))) (float-time - (apply #'encode-time (org-parse-time-string ts nil t)))) + (apply #'encode-time (org-parse-time-string ts)))) h (floor (/ s 3600)) s (- s (* 3600 h)) m (floor (/ s 60)) @@ -1711,8 +1711,8 @@ Optional argument N tells to change by that many units." (begts (if updatets1 begts1 begts2))) (setq tdiff (time-subtract - (org-time-string-to-time org-last-changed-timestamp t) - (org-time-string-to-time ts t))) + (org-time-string-to-time org-last-changed-timestamp) + (org-time-string-to-time ts))) (save-excursion (goto-char begts) (org-timestamp-change @@ -1820,10 +1820,10 @@ PROPNAME lets you set a custom text property instead of :org-clock-minutes." (lmax 30) (ltimes (make-vector lmax 0)) (level 0) - (tstart (cond ((stringp tstart) (org-time-string-to-seconds tstart t)) + (tstart (cond ((stringp tstart) (org-time-string-to-seconds tstart)) ((consp tstart) (float-time tstart)) (t tstart))) - (tend (cond ((stringp tend) (org-time-string-to-seconds tend t)) + (tend (cond ((stringp tend) (org-time-string-to-seconds tend)) ((consp tend) (float-time tend)) (t tend))) (t1 0) @@ -1840,11 +1840,10 @@ PROPNAME lets you set a custom text property instead of :org-clock-minutes." (let* ((ts (float-time (apply #'encode-time (save-match-data - (org-parse-time-string - (match-string 2) nil t))))) + (org-parse-time-string (match-string 2)))))) (te (float-time (apply #'encode-time - (org-parse-time-string (match-string 3) nil t)))) + (org-parse-time-string (match-string 3))))) (dt (- (if tend (min te tend) te) (if tstart (max ts tstart) ts)))) (when (> dt 0) (cl-incf t1 (floor (/ dt 60)))))) @@ -2902,9 +2901,9 @@ Otherwise, return nil." (setq ts (match-string 1) te (match-string 3)) (setq s (- (float-time - (apply #'encode-time (org-parse-time-string te nil t))) + (apply #'encode-time (org-parse-time-string te))) (float-time - (apply #'encode-time (org-parse-time-string ts nil t)))) + (apply #'encode-time (org-parse-time-string ts)))) neg (< s 0) s (abs s) h (floor (/ s 3600)) diff --git a/lisp/org-colview.el b/lisp/org-colview.el index 2a427aecc..5fcd4cb4a 100644 --- a/lisp/org-colview.el +++ b/lisp/org-colview.el @@ -1094,7 +1094,7 @@ as a canonical duration, i.e., using units defined in (cond ((string-match-p org-ts-regexp s) (/ (- org-columns--time - (float-time (apply #'encode-time (org-parse-time-string s nil t)))) + (float-time (apply #'encode-time (org-parse-time-string s)))) 60)) ((org-duration-p s) (org-duration-to-minutes s t)) ;skip user units (t (user-error "Invalid age: %S" s)))) diff --git a/lisp/org-list.el b/lisp/org-list.el index 8ea569f99..5b292d0ca 100644 --- a/lisp/org-list.el +++ b/lisp/org-list.el @@ -149,7 +149,7 @@ (declare-function org-remove-indentation "org" (code &optional n)) (declare-function org-show-subtree "org" ()) (declare-function org-sort-remove-invisible "org" (S)) -(declare-function org-time-string-to-seconds "org" (s &optional zone)) +(declare-function org-time-string-to-seconds "org" (s)) (declare-function org-timer-hms-to-secs "org-timer" (hms)) (declare-function org-timer-item "org-timer" (&optional arg)) (declare-function org-trim "org" (s &optional keep-lead)) diff --git a/lisp/org.el b/lisp/org.el index 045086b99..bacef3e91 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -5710,11 +5710,19 @@ This should be called after the variable `org-link-parameters' has changed." (not (and (equal marker "+") (org-match-line "[ \t]*\\(|[-+]+|?\\|\\+[-+]+\\+\\)[ \t]*$"))) + ;; Do not match headline stars. Do not consider + ;; stars of a headline as closing marker for bold + ;; markup either. + (not (and (equal marker "*") + (save-excursion + (forward-char) + (skip-chars-backward "*") + (looking-at-p org-outline-regexp-bol)))) ;; Match full emphasis markup regexp. (looking-at (if verbatim? org-verbatim-re org-emph-re)) ;; Do not span over paragraph boundaries. (not (string-match-p org-element-paragraph-separate - (match-string 0))) + (match-string 2))) ;; Do not span over cells in table rows. (not (and (save-match-data (org-match-line "[ \t]*|")) (string-match-p "|" (match-string 4)))))) @@ -14330,7 +14338,7 @@ it as a time string and apply `float-time' to it. If S is nil, just return 0." ((numberp s) s) ((stringp s) (condition-case nil - (float-time (apply #'encode-time (org-parse-time-string s nil t))) + (float-time (apply #'encode-time (org-parse-time-string s))) (error 0.))) (t 0.))) @@ -17079,8 +17087,8 @@ both scheduled and deadline timestamps." 'timestamp) (org-at-planning-p)) (time-less-p - (org-time-string-to-time match t) - (org-time-string-to-time d t))))))) + (org-time-string-to-time match) + (org-time-string-to-time d))))))) (message "%d entries before %s" (org-occur regexp nil callback) d))) @@ -17101,8 +17109,8 @@ both scheduled and deadline timestamps." 'timestamp) (org-at-planning-p)) (not (time-less-p - (org-time-string-to-time match t) - (org-time-string-to-time d t)))))))) + (org-time-string-to-time match) + (org-time-string-to-time d)))))))) (message "%d entries after %s" (org-occur regexp nil callback) d))) @@ -17125,11 +17133,11 @@ both scheduled and deadline timestamps." 'timestamp) (org-at-planning-p)) (not (time-less-p - (org-time-string-to-time match t) - (org-time-string-to-time start-date t))) + (org-time-string-to-time match) + (org-time-string-to-time start-date))) (time-less-p - (org-time-string-to-time match t) - (org-time-string-to-time end-date t)))))))) + (org-time-string-to-time match) + (org-time-string-to-time end-date)))))))) (message "%d entries between %s and %s" (org-occur regexp nil callback) start-date end-date))) @@ -17214,19 +17222,13 @@ days in order to avoid rounding problems." (push m l)) (apply 'format fmt (nreverse l)))) -(defun org-time-string-to-time (s &optional zone) - "Convert timestamp string S into internal time. -The optional ZONE is omitted or nil for Emacs local time, t for -Universal Time, ‘wall’ for system wall clock time, or a string as -in the TZ environment variable." - (apply #'encode-time (org-parse-time-string s nil zone))) +(defun org-time-string-to-time (s) + "Convert timestamp string S into internal time." + (apply #'encode-time (org-parse-time-string s))) -(defun org-time-string-to-seconds (s &optional zone) - "Convert a timestamp string S into a number of seconds. -The optional ZONE is omitted or nil for Emacs local time, t for -Universal Time, ‘wall’ for system wall clock time, or a string as -in the TZ environment variable." - (float-time (org-time-string-to-time s zone))) +(defun org-time-string-to-seconds (s) + "Convert a timestamp string S into a number of seconds." + (float-time (org-time-string-to-time s))) (org-define-error 'org-diary-sexp-no-match "Unable to match diary sexp") @@ -17443,17 +17445,13 @@ day number." (list (nth 4 d) (nth 3 d) (nth 5 d)))) ((listp d) (list (nth 4 d) (nth 3 d) (nth 5 d))))) -(defun org-parse-time-string (s &optional nodefault zone) +(defun org-parse-time-string (s &optional nodefault) "Parse the standard Org time string. This should be a lot faster than the normal `parse-time-string'. If time is not given, defaults to 0:00. However, with optional -NODEFAULT, hour and minute fields will be nil if not given. - -The optional ZONE is omitted or nil for Emacs local time, t for -Universal Time, ‘wall’ for system wall clock time, or a string as -in the TZ environment variable." +NODEFAULT, hour and minute fields will be nil if not given." (cond ((string-match org-ts-regexp0 s) (list 0 (when (or (match-beginning 8) (not nodefault)) @@ -17463,7 +17461,7 @@ in the TZ environment variable." (string-to-number (match-string 4 s)) (string-to-number (match-string 3 s)) (string-to-number (match-string 2 s)) - nil nil zone)) + nil nil nil)) ((string-match "^<[^>]+>$" s) ;; FIXME: `decode-time' needs to be called with ZONE as its ;; second argument. However, this requires at least Emacs diff --git a/testing/lisp/test-org-clock.el b/testing/lisp/test-org-clock.el index 98dab5b0b..b7b09ed56 100644 --- a/testing/lisp/test-org-clock.el +++ b/testing/lisp/test-org-clock.el @@ -49,8 +49,8 @@ Return the clock line as a string." (let* ((beg (org-test-clock-create-timestamp input1 t t)) (end (and input2 (org-test-clock-create-timestamp input2 t t))) (sec-diff (and input2 - (floor (- (org-time-string-to-seconds end t) - (org-time-string-to-seconds beg t)))))) + (floor (- (org-time-string-to-seconds end) + (org-time-string-to-seconds beg)))))) (concat org-clock-string " " beg (when end (concat "--" end " => " @@ -344,15 +344,15 @@ the buffer." ;; line, and ignore "file" column. (should (equal - "| Headline | Time | | -|--------------+------------+-----| -| *Total time* | *16904:01* | foo | -|--------------+------------+-----| -| Test | 16904:01 | foo | + "| Headline | Time | | +|--------------+--------+-----| +| *Total time* | *8:40* | foo | +|--------------+--------+-----| +| Test | 8:40 | foo | #+TBLFM: $3=string(\"foo\")" (org-test-with-temp-text-in-file "* Test -CLOCK: [2012-03-29 Thu 16:40]--[2014-03-04 Thu 00:41] => 16904:01" +CLOCK: [2012-03-29 Thu 8:00]--[2012-03-29 Thu 16:40] => 8:40" (test-org-clock-clocktable-contents ":scope file-with-archives" "#+TBLFM: $3=string(\"foo\")")))) ;; Test "function" scope. diff --git a/testing/lisp/test-org-colview.el b/testing/lisp/test-org-colview.el index e6b02b9e1..721aa87fe 100644 --- a/testing/lisp/test-org-colview.el +++ b/testing/lisp/test-org-colview.el @@ -513,7 +513,7 @@ (cl-letf (((symbol-function 'current-time) (lambda () (apply #'encode-time - (org-parse-time-string "<2014-03-04 Tue>" nil t))))) + (org-parse-time-string "<2014-03-04 Tue>"))))) (org-test-with-temp-text "* H ** S1 @@ -528,39 +528,39 @@ (get-char-property (point) 'org-columns-value-modified))))) (should (equal - "705d" + "2d" (cl-letf (((symbol-function 'current-time) (lambda () (apply #'encode-time - (org-parse-time-string "<2014-03-04 Tue>" nil t))))) + (org-parse-time-string "<2014-03-04 Tue>"))))) (org-test-with-temp-text "* H ** S1 :PROPERTIES: -:A: <2012-03-29 Thu> +:A: <2014-03-03 Mon> :END: ** S1 :PROPERTIES: -:A: <2014-03-04 Tue> +:A: <2014-03-02 Sun> :END:" (let ((org-columns-default-format "%A{@max}")) (org-columns)) (get-char-property (point) 'org-columns-value-modified))))) (should (equal - "352d 12h" + "1d 12h" (cl-letf (((symbol-function 'current-time) (lambda () (apply #'encode-time - (org-parse-time-string "<2014-03-04 Tue>" nil t))))) + (org-parse-time-string "<2014-03-04 Tue>"))))) (org-test-with-temp-text "* H ** S1 :PROPERTIES: -:A: <2012-03-29 Thu> +:A: <2014-03-03 Mon> :END: ** S1 :PROPERTIES: -:A: <2014-03-04 Tue> +:A: <2014-03-02 Sun> :END:" (let ((org-columns-default-format "%A{@mean}")) (org-columns)) (get-char-property (point) 'org-columns-value-modified)))))