summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2018-02-21 15:04:37 +0100
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2018-02-21 15:04:37 +0100
commit79b36b6a8dad24f90eb8e35cebe0a5d0f1ad0aac (patch)
treef35ebe3a63d9bb11dfe338675e31086498f44d66
parent70b029c6a815320f90c916e0670da51ddd49363e (diff)
parent6655429b8d7ee686a8300b61af587599cd656a22 (diff)
downloadorg-mode-79b36b6a8dad24f90eb8e35cebe0a5d0f1ad0aac.tar.gz
Merge branch 'maint'
-rw-r--r--lisp/org-capture.el31
-rw-r--r--lisp/org-clock.el54
2 files changed, 45 insertions, 40 deletions
diff --git a/lisp/org-capture.el b/lisp/org-capture.el
index 19f195e..39b7b50 100644
--- a/lisp/org-capture.el
+++ b/lisp/org-capture.el
@@ -724,21 +724,24 @@ captured item after finalizing."
;; Did we start the clock in this capture buffer?
(when (and org-capture-clock-was-started
- org-clock-marker (marker-buffer org-clock-marker)
- (equal (marker-buffer org-clock-marker) (buffer-base-buffer))
- (> org-clock-marker (point-min))
+ org-clock-marker
+ (eq (marker-buffer org-clock-marker) (buffer-base-buffer))
+ (>= org-clock-marker (point-min))
(< org-clock-marker (point-max)))
- ;; Looks like the clock we started is still running. Clock out.
- (when (not org-capture-clock-keep) (let (org-log-note-clock-out) (org-clock-out)))
- (when (and (not org-capture-clock-keep)
- (org-capture-get :clock-resume 'local)
- (markerp (org-capture-get :interrupted-clock 'local))
- (buffer-live-p (marker-buffer
- (org-capture-get :interrupted-clock 'local))))
- (let ((clock-in-task (org-capture-get :interrupted-clock 'local)))
- (org-with-point-at clock-in-task
- (org-clock-in)))
- (message "Interrupted clock has been resumed")))
+ ;; Looks like the clock we started is still running.
+ (if org-capture-clock-keep
+ ;; User may have completed clocked heading from the template.
+ ;; Refresh clock mode line.
+ (org-clock-update-mode-line t)
+ ;; Clock out. Possibly resume interrupted clock.
+ (let (org-log-note-clock-out) (org-clock-out))
+ (when (and (org-capture-get :clock-resume 'local)
+ (markerp (org-capture-get :interrupted-clock 'local))
+ (buffer-live-p (marker-buffer
+ (org-capture-get :interrupted-clock 'local))))
+ (let ((clock-in-task (org-capture-get :interrupted-clock 'local)))
+ (org-with-point-at clock-in-task (org-clock-in)))
+ (message "Interrupted clock has been resumed"))))
(let ((beg (point-min))
(end (point-max))
diff --git a/lisp/org-clock.el b/lisp/org-clock.el
index 8e73342..665b46f 100644
--- a/lisp/org-clock.el
+++ b/lisp/org-clock.el
@@ -513,6 +513,13 @@ cannot be translated."
(assoc-string language org-clock-clocktable-language-setup t))
s))
+(defun org-clock--mode-line-heading ()
+ "Return currently clocked heading, formatted for mode line."
+ (cond ((functionp org-clock-heading-function)
+ (funcall org-clock-heading-function))
+ ((org-before-first-heading-p) "???")
+ (t (org-get-heading t t t t))))
+
(defun org-clock-menu ()
(interactive)
(popup-menu
@@ -658,22 +665,22 @@ If an effort estimate was defined for the current item, use
01:30/01:50 format (clocked/estimated).
If not, show simply the clocked time like 01:50."
(let ((clocked-time (org-clock-get-clocked-time)))
- (if org-clock-effort
- (let* ((effort-in-minutes (org-duration-to-minutes org-clock-effort))
- (work-done-str
- (propertize
- (org-duration-from-minutes clocked-time)
- 'face (if (and org-clock-task-overrun (not org-clock-task-overrun-text))
- 'org-mode-line-clock-overrun 'org-mode-line-clock)))
- (effort-str (org-duration-from-minutes effort-in-minutes))
- (clockstr (propertize
- (concat " [%s/" effort-str
- "] (" (replace-regexp-in-string "%" "%%" org-clock-heading) ")")
- 'face 'org-mode-line-clock)))
- (format clockstr work-done-str))
- (propertize (concat " [" (org-duration-from-minutes clocked-time)
- "]" (format " (%s)" org-clock-heading))
- 'face 'org-mode-line-clock))))
+ (propertize
+ (if org-clock-effort
+ (let* ((effort-in-minutes (org-duration-to-minutes org-clock-effort))
+ (work-done-str
+ (propertize (org-duration-from-minutes clocked-time)
+ 'face
+ (if (and org-clock-task-overrun
+ (not org-clock-task-overrun-text))
+ 'org-mode-line-clock-overrun
+ 'org-mode-line-clock)))
+ (effort-str (org-duration-from-minutes effort-in-minutes)))
+ (format " [%s/%s] (%s)" work-done-str effort-str org-clock-heading))
+ (format " [%s] (%s)"
+ (org-duration-from-minutes clocked-time)
+ org-clock-heading))
+ 'face 'org-mode-line-clock)))
(defun org-clock-get-last-clock-out-time ()
"Get the last clock-out time for the current subtree."
@@ -683,10 +690,13 @@ If not, show simply the clocked time like 01:50."
".*\\]--\\(\\[[^]]+\\]\\)") end t)
(org-time-string-to-time (match-string 1))))))
-(defun org-clock-update-mode-line ()
+(defun org-clock-update-mode-line (&optional refresh)
+ "Update mode line with clock information.
+When optional argument is non-nil, refresh cached heading."
(if org-clock-effort
(org-clock-notify-once-if-expired)
(setq org-clock-task-overrun nil))
+ (when refresh (setq org-clock-heading (org-clock--mode-line-heading)))
(setq org-mode-line-string
(propertize
(let ((clock-string (org-clock-get-clock-string))
@@ -1270,15 +1280,7 @@ the default behavior."
org-clock-in-switch-to-state
"\\>"))))
(org-todo org-clock-in-switch-to-state)))
- (setq org-clock-heading
- (cond ((and org-clock-heading-function
- (functionp org-clock-heading-function))
- (funcall org-clock-heading-function))
- ((nth 4 (org-heading-components))
- (replace-regexp-in-string
- "\\[\\[.*?\\]\\[\\(.*?\\)\\]\\]" "\\1"
- (match-string-no-properties 4)))
- (t "???")))
+ (setq org-clock-heading (org-clock--mode-line-heading))
(org-clock-find-position org-clock-in-resume)
(cond
((and org-clock-in-resume