diff --git a/lisp/org-clock.el b/lisp/org-clock.el index 87ca180..445a336 100644 --- a/lisp/org-clock.el +++ b/lisp/org-clock.el @@ -158,6 +158,9 @@ All this depends on running `org-clock-persistence-insinuate' in .emacs" (defvar org-clock-heading-for-remember "") (defvar org-clock-start-time "") +(defvar org-clock-effort "" + "Effort estimate of the currently clocking task") + (defvar org-clock-history nil "List of marker pointing to recent clocked tasks.") @@ -267,23 +270,50 @@ pointing to it." (cons i marker))))) (defun org-clock-update-mode-line () - (let* ((delta (- (time-to-seconds (current-time)) - (time-to-seconds org-clock-start-time))) - (h (floor delta 3600)) - (m (floor (- delta (* 3600 h)) 60))) - (setq org-mode-line-string - (org-propertize - (let ((clock-string (format (concat "-[" org-time-clocksum-format " (%s)]") - h m org-clock-heading)) - (help-text "Org-mode clock is running. Mouse-2 to go there.")) - (if (and (> org-clock-string-limit 0) - (> (length clock-string) org-clock-string-limit)) - (org-propertize (substring clock-string 0 org-clock-string-limit) - 'help-echo (concat help-text ": " org-clock-heading)) - (org-propertize clock-string 'help-echo help-text))) - 'local-map org-clock-mode-line-map - 'mouse-face (if (featurep 'xemacs) 'highlight 'mode-line-highlight))) - (force-mode-line-update))) + (setq org-mode-line-string + (org-propertize + (let ((clock-string (org-clock-get-clock-string)) + (help-text "Org-mode clock is running. Mouse-2 to go there.")) + (if (and (> org-clock-string-limit 0) + (> (length clock-string) org-clock-string-limit)) + (org-propertize (substring clock-string 0 org-clock-string-limit) + 'help-echo (concat help-text ": " org-clock-heading)) + (org-propertize clock-string 'help-echo help-text))) + 'local-map org-clock-mode-line-map + 'mouse-face (if (featurep 'xemacs) 'highlight 'mode-line-highlight))) + (force-mode-line-update)) + +(defun org-clock-get-clock-string () + "Form a clock-string, that will be show in the mode line. +If effort estimate was defined for current item, then use 01:30/01:50 format (clocked/estimated). +If not, then 01:50 format (clocked). +" + (let* ((clocked-time (org-clock-get-clocked-time)) + (h (floor clocked-time 3600)) + (m (floor (- clocked-time (* 3600 h)) 60)) + ) + (if (and org-clock-effort) + (let* ((effort-in-minutes (org-hh:mm-string-to-minutes org-clock-effort)) + (effort-h (floor effort-in-minutes 60)) + (effort-m (- effort-in-minutes (* effort-h 60))) + ) + (format (concat "-[" org-time-clocksum-format "/" org-time-clocksum-format " (%s)]") + h m effort-h effort-m org-clock-heading) + ) + (format (concat "-[" org-time-clocksum-format " (%s)]") + h m org-clock-heading)) + )) + +(defun org-clock-get-clocked-time () + "" + (let ((currently-clocked-time (- (time-to-seconds (current-time)) + (time-to-seconds org-clock-start-time)))) + ;; (if org-clock-show-total-time + ;; ;; TODO: make total-clocked-time TOTAL, and not current clocked time :) + ;; currently-clocked-time + currently-clocked-time + ;; ) + )) (defvar org-clock-mode-line-entry nil "Information for the modeline about the running clock.") @@ -387,6 +417,7 @@ the clocking selection, associated with the letter `d'." (beginning-of-line 1) (org-indent-line-to (- (org-get-indentation) 2))) (insert org-clock-string " ") + (setq org-clock-effort (org-get-effort)) (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))