org-clock-out-hook can now query org-clock-clocking-in to see if org-clock-out is being called inside org-clock-in. This allows the hook to selectively clock in another task without leaving clocks open. --- Here's the updated patch which seems to work just as well.
This patch is available at git://git.norang.ca/org-mode.git persistent-clocking Most of the changes here are whitespace. The very last change in the patch is the only interesting part. -Bernt lisp/org-clock.el | 25 +++++++++++++------------ 1 files changed, 13 insertions(+), 12 deletions(-) diff --git a/lisp/org-clock.el b/lisp/org-clock.el index 68a40ce..dbcd032 100644 --- a/lisp/org-clock.el +++ b/lisp/org-clock.el @@ -925,7 +925,7 @@ the clocking selection, associated with the letter `d'." (org-clocking-p))) ts selected-task target-pos (msg-extra "") (leftover (and (not org-clock-resolving-clocks) - org-clock-leftover-time))) + org-clock-leftover-time))) (when (and org-clock-auto-clock-resolution (or (not interrupting) (eq t org-clock-auto-clock-resolution)) @@ -944,22 +944,23 @@ the clocking selection, associated with the letter `d'." ;; Save a marker to this task, so that we can go back. ;; First check if we are trying to clock into the same task! (if (save-excursion - (unless selected-task - (org-back-to-heading t)) - (and (equal (marker-buffer org-clock-hd-marker) - (if selected-task - (marker-buffer selected-task) - (current-buffer))) - (= (marker-position org-clock-hd-marker) - (if selected-task - (marker-position selected-task) - (point))))) + (unless selected-task + (org-back-to-heading t)) + (and (equal (marker-buffer org-clock-hd-marker) + (if selected-task + (marker-buffer selected-task) + (current-buffer))) + (= (marker-position org-clock-hd-marker) + (if selected-task + (marker-position selected-task) + (point))))) (message "Clock continues in \"%s\"" org-clock-heading) (progn (move-marker org-clock-interrupted-task (marker-position org-clock-marker) (org-clocking-buffer)) - (org-clock-out t)))) + (let ((org-clock-clocking-in t)) + (org-clock-out t))))) (when (equal select '(16)) ;; Mark as default clocking task -- 1.7.1.86.g0e460 _______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode