Function: org-clock-update-time-maybe

org-clock-update-time-maybe is an autoloaded, interactive and byte-compiled function defined in org-clock.el.gz.

Signature

(org-clock-update-time-maybe)

Documentation

If this is a CLOCK line, update it and return t.

Otherwise, return nil.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-clock.el.gz
;;;###autoload
(defun org-clock-update-time-maybe ()
  "If this is a CLOCK line, update it and return t.
Otherwise, return nil."
  (interactive)
  (let ((origin (point))) ;; `save-excursion' may not work when deleting.
    (prog1
        (save-excursion
          (forward-line 0)
          (skip-chars-forward " \t")
          (when (looking-at org-clock-string)
            (let ((re (concat "[ \t]*" org-clock-string
                              " *[[<]\\([^]>]+\\)[]>]\\(-+[[<]\\([^]>]+\\)[]>]"
                              "\\([ \t]*=>.*\\)?\\)?"))
                  ts te h m s neg)
              (cond
	       ((not (looking-at re))
                nil)
	       ((not (match-end 2))
                (when (and (equal (marker-buffer org-clock-marker) (current-buffer))
                           (> org-clock-marker (point))
                           (<= org-clock-marker (line-end-position)))
                  ;; The clock is running here
                  (setq org-clock-start-time
                        (org-time-string-to-time (match-string 1)))
                  (org-clock-update-mode-line)))
	       (t
                ;; Prevent recursive call from `org-timestamp-change'.
                (cl-letf (((symbol-function 'org-clock-update-time-maybe) #'ignore))
                  ;; Update timestamps.
                  (save-excursion
                    (goto-char (match-beginning 1)) ; opening timestamp
                    (save-match-data (org-timestamp-change 0 'day)))
                  ;; Refresh match data.
                  (looking-at re)
                  (save-excursion
                    (goto-char (match-beginning 3)) ; closing timestamp
                    (save-match-data (org-timestamp-change 0 'day))))
                ;; Refresh match data.
                (looking-at re)
                (and (match-end 4) (delete-region (match-beginning 4) (match-end 4)))
                (end-of-line 1)
                (setq ts (match-string 1)
                      te (match-string 3))
                (setq s (- (org-time-string-to-seconds te)
                           (org-time-string-to-seconds ts))
                      neg (< s 0)
                      s (abs s)
                      h (floor (/ s 3600))
                      s (- s (* 3600 h))
                      m (floor (/ s 60))
                      s (- s (* 60 s)))
                (insert " => " (format (if neg "-%d:%02d" "%2d:%02d") h m))
                t)))))
      ;; Move back to initial position, but never beyond updated
      ;; clock.
      (unless (< (point) origin)
        (goto-char origin)))))