If the option `org-clock-resume' is t, and the first clock line in an entry is is open, clocking into that task resumes the clock from that time. --- lisp/ChangeLog | 8 ++++++++ lisp/org-clock.el | 28 +++++++++++++++++++++------- 2 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e4ffc88..438296d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -3,6 +3,14 @@ * org.el (org-insert-todo-heading): Fix bug with force-heading argument. +2008-10-23 James TD Smith <[EMAIL PROTECTED]> + + * org-clock.el (org-clock-in-resume): Add a custom option to + toggle starting the clock from an open clock line. + (org-clock-in): When clocking in to an entry, if + `org-clock-in-resume' is set, check if the first clock line is + open and if so, start the clock from the time in the clock line. + 2008-10-22 Carsten Dominik <[EMAIL PROTECTED]> * org-exp.el (org-export-as-ascii): Handle the case that we are diff --git a/lisp/org-clock.el b/lisp/org-clock.el index da86b0d..40272d4 100644 --- a/lisp/org-clock.el +++ b/lisp/org-clock.el @@ -95,6 +95,12 @@ The function is called with point at the beginning of the headline." :group 'org-clock :type 'integer) +(defcustom org-clock-in-resume nil + "If non-nil, when clocking into a task with a clock entry which +has not been closed, resume the clock from that point" + :group 'org-clock + :type 'boolean) + ;;; The clock for measuring work time. (defvar org-mode-line-string "") @@ -291,12 +297,21 @@ the clocking selection, associated with the letter `d'." (t "???"))) (setq org-clock-heading (org-propertize org-clock-heading 'face nil)) (org-clock-find-position) - - (insert "\n") (backward-char 1) - (org-indent-line-function) - (insert org-clock-string " ") - (setq org-clock-start-time (current-time)) - (setq ts (org-insert-time-stamp (current-time) 'with-hm 'inactive)) + (if (and org-clock-in-resume + (looking-at (concat "^[ \\t]* " org-clock-string + " \\[\\([0-9]\\{4\\}-[0-9]\\{2\\}-[0-9]\\{2\\}" + " +\\sw+ +[012][0-9]:[0-5][0-9]\\)\\]$"))) + (progn (message "Matched %s" (match-string 1)) + (setq ts (concat "[" (match-string 1) "]")) + (goto-char (match-end 1)) + (setq org-clock-start-time + (apply 'encode-time (org-parse-time-string (match-string 1))))) + (progn + (insert "\n") (backward-char 1) + (org-indent-line-function) + (insert org-clock-string " ") + (setq org-clock-start-time (current-time)) + (setq ts (org-insert-time-stamp org-clock-start-time 'with-hm 'inactive)))) (move-marker org-clock-marker (point) (buffer-base-buffer)) (or global-mode-string (setq global-mode-string '(""))) (or (memq 'org-mode-line-string global-mode-string) @@ -962,7 +977,6 @@ the currently selected interval size." (re-search-forward "#\\+END:") (end-of-line 0)))) - (defun org-clocktable-add-file (file table) (if table (let ((lines (org-split-string table "\n")) -- 1.5.6.5 _______________________________________________ Emacs-orgmode mailing list Remember: use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode