Browse Source

Clock: Allow to add the current clock when preparing a report

This is dependent on the new variable
`org-clock-report-include-clocking-task', default nil.

Patch by Bernt Hansen.
Carsten Dominik 15 years ago
parent
commit
93c721fabf
2 changed files with 18 additions and 0 deletions
  1. 6 0
      lisp/ChangeLog
  2. 12 0
      lisp/org-clock.el

+ 6 - 0
lisp/ChangeLog

@@ -1,3 +1,9 @@
+2010-02-27  Carsten Dominik  <carsten.dominik@gmail.com>
+
+	* org-clock.el (org-clock-report-include-clocking-task): New
+	option.
+	(org-clock-sum): Add the current clocking task.
+
 2010-02-26  Carsten Dominik  <carsten.dominik@gmail.com>
 2010-02-26  Carsten Dominik  <carsten.dominik@gmail.com>
 
 
 	* org.el (org-cycle): Print a message when in a table.el table.
 	* org.el (org-cycle): Print a message when in a table.el table.

+ 12 - 0
lisp/org-clock.el

@@ -240,6 +240,11 @@ string as argument."
 	  (const :tag "Always" t)
 	  (const :tag "Always" t)
 	  (const :tag "When no clock is running" when-no-clock-is-running)))
 	  (const :tag "When no clock is running" when-no-clock-is-running)))
 
 
+(defcustom org-clock-report-include-clocking-task nil
+  "When non-nil, include the current clocking task time in clock reports."
+  :group 'org-clock
+  :type 'boolean)
+
 (defvar org-clock-in-prepare-hook nil
 (defvar org-clock-in-prepare-hook nil
   "Hook run when preparing the clock.
   "Hook run when preparing the clock.
 This hook is run before anything happens to the task that
 This hook is run before anything happens to the task that
@@ -1341,6 +1346,13 @@ TSTART and TEND can mark a time range to be considered."
 	  (setq t1 (+ t1 (string-to-number (match-string 5))
 	  (setq t1 (+ t1 (string-to-number (match-string 5))
 		      (* 60 (string-to-number (match-string 4))))))
 		      (* 60 (string-to-number (match-string 4))))))
 	 (t ;; A headline
 	 (t ;; A headline
+	  ;; Add the currently clocking item time to the total
+	  (when (and org-clock-report-include-clocking-task
+		     (equal (org-clocking-buffer) (current-buffer))
+		     (equal (marker-position org-clock-hd-marker) (point)))
+	      (let ((time (floor (- (org-float-time)
+				    (org-float-time org-clock-start-time)) 60)))
+		(setq t1 (+ t1 time))))
 	  (setq level (- (match-end 1) (match-beginning 1)))
 	  (setq level (- (match-end 1) (match-beginning 1)))
 	  (when (or (> t1 0) (> (aref ltimes level) 0))
 	  (when (or (> t1 0) (> (aref ltimes level) 0))
 	    (loop for l from 0 to level do
 	    (loop for l from 0 to level do