emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Orgmode] [PATCH 2/3] Add clock resuming.


From: James TD Smith
Subject: [Orgmode] [PATCH 2/3] Add clock resuming.
Date: Thu, 23 Oct 2008 11:27:42 +0100

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  <address@hidden>
+
+       * 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  <address@hidden>
 
        * 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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]