# HG changeset patch # User John Wiegley # Date 988076275 0 # Node ID ed485de91fcf2a5be7ca2307fed0df6c5db0d955 # Parent 33a9a90f3e762966898662ee776bc00b4c31d84b (timeclock-day-required): If the time required for a particular day is not set, use `timeclock-workday'. (timeclock-find-discrep): Added some sample code in a comment. diff -r 33a9a90f3e76 -r ed485de91fcf lisp/calendar/timeclock.el --- a/lisp/calendar/timeclock.el Tue Apr 24 01:37:31 2001 +0000 +++ b/lisp/calendar/timeclock.el Tue Apr 24 01:37:55 2001 +0000 @@ -1,6 +1,6 @@ ;;; timeclock.el --- mode for keeping track of how much you work -;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. ;; Author: John Wiegley ;; Created: 25 Mar 1999 @@ -170,10 +170,10 @@ timeclock-update-timer))) (setq currently-displaying nil)) (and currently-displaying - (set-variable timeclock-modeline-display nil)) + (set-variable 'timeclock-modeline-display nil)) (setq timeclock-use-display-time value) (and currently-displaying - (set-variable timeclock-modeline-display t)) + (set-variable 'timeclock-modeline-display t)) timeclock-use-display-time)) :type 'boolean :group 'timeclock @@ -275,7 +275,8 @@ (if on-p (let ((list-entry (memq 'global-mode-string mode-line-format))) - (unless (memq 'timeclock-mode-string mode-line-format) + (unless (or (null list-entry) + (memq 'timeclock-mode-string mode-line-format)) (setcdr list-entry (cons 'timeclock-mode-string (cdr list-entry)))) @@ -712,7 +713,7 @@ (defsubst timeclock-day-required (day) - (car day)) + (or (car day) timeclock-workday)) (defsubst timeclock-day-length (day) (timeclock-entry-list-length (cdr day))) @@ -998,13 +999,23 @@ ;; This is not implemented in terms of the functions above, because ;; it's a bit wasteful to read all of that data in, just to throw ;; away more than 90% of the information afterwards. - (when (file-readable-p timeclock-file) - (let* ((now (current-time)) - (todays-date (timeclock-time-to-date now)) - (first t) (accum 0) - event beg last-date avg - last-date-limited last-date-seconds) - (unless timeclock-discrepancy + ;; + ;; If it were implemented using those functions, it would look + ;; something like this: + ;; (let ((days (timeclock-day-alist (timeclock-log-data))) + ;; (total 0.0)) + ;; (while days + ;; (setq total (+ total (- (timeclock-day-length (cdar days)) + ;; (timeclock-day-required (cdar days)))) + ;; days (cdr days))) + ;; total) + (let* ((now (current-time)) + (todays-date (timeclock-time-to-date now)) + (first t) (accum 0) + event beg last-date avg + last-date-limited last-date-seconds) + (unless timeclock-discrepancy + (when (file-readable-p timeclock-file) (setq timeclock-project-list nil timeclock-last-project nil timeclock-reason-list nil @@ -1028,10 +1039,11 @@ (add-to-list 'timeclock-project-list (nth 2 event)) (setq timeclock-last-project (nth 2 event))) (let ((date (timeclock-time-to-date (cadr event)))) - (if (and timeclock-relative - (if last-date - (not (equal date last-date)) - first)) + (if (if timeclock-relative + (if last-date + (not (equal date last-date)) + first) + (equal date todays-date)) (setq first nil accum (- accum (if last-date-limited @@ -1051,39 +1063,31 @@ (if (not beg) (error "Error in format of timelog file!") (setq timeclock-last-period - (- (timeclock-time-to-seconds (cadr event)) - beg) + (- (timeclock-time-to-seconds (cadr event)) beg) accum (+ timeclock-last-period accum) - beg nil))) + beg nil)) + (setq beg nil)) (if (equal last-date todays-date) (setq timeclock-elapsed (+ timeclock-last-period timeclock-elapsed))))) (setq timeclock-last-event event timeclock-last-event-workday - (if (equal (timeclock-time-to-date now) - last-date-limited) + (if (equal (timeclock-time-to-date now) last-date-limited) last-date-seconds timeclock-workday)) (forward-line)) - (setq timeclock-discrepancy accum))) - (setq accum (if today-only - timeclock-elapsed - timeclock-discrepancy)) - (if timeclock-last-event - (if (equal (car timeclock-last-event) "i") - (setq accum (+ accum (timeclock-last-period now))) - (if (not (equal (timeclock-time-to-date - (cadr timeclock-last-event)) - (timeclock-time-to-date now))) - (setq accum (- accum timeclock-last-event-workday))))) - (setq accum - (- accum - (if (and timeclock-last-event - (equal (timeclock-time-to-date - (cadr timeclock-last-event)) - (timeclock-time-to-date now))) - timeclock-last-event-workday - timeclock-workday)))))) + (setq timeclock-discrepancy accum)))) + (setq accum (if today-only + timeclock-elapsed + timeclock-discrepancy)) + (if timeclock-last-event + (if (equal (car timeclock-last-event) "i") + (setq accum (+ accum (timeclock-last-period now))) + (if (not (equal (timeclock-time-to-date + (cadr timeclock-last-event)) + (timeclock-time-to-date now))) + (setq accum (- accum timeclock-last-event-workday))))) + accum)) ;;; A reporting function that uses timeclock-log-data @@ -1158,10 +1162,14 @@ (if (null two-week-len) (setq two-week-len today-len)) (if html-p (insert "

")) - (insert "\nTime spent on this task today: " - (timeclock-seconds-to-string today-len) - ". In the last two weeks: " - (timeclock-seconds-to-string two-week-len)) + (if today-len + (insert "\nTime spent on this task today: " + (timeclock-seconds-to-string today-len) + ". In the last two weeks: " + (timeclock-seconds-to-string two-week-len)) + (if two-week-len + (insert "\nTime spent on this task in the last two weeks: " + (timeclock-seconds-to-string two-week-len)))) (if html-p (insert "
")) (insert "\n" (timeclock-seconds-to-string (timeclock-workday-elapsed)) @@ -1262,7 +1270,7 @@ "\n") (setq i (1+ i)))) (insert "\n") - + (insert "\n") (insert "Time out\n") (let ((i 0) (l 5)) @@ -1272,7 +1280,7 @@ "\n") (setq i (1+ i)))) (insert "\n") - + (insert "\n") (insert "Break\n") (let ((i 0) (l 5)) @@ -1282,7 +1290,7 @@ "\n") (setq i (1+ i)))) (insert "\n") - + (insert "\n") (insert "Workday\n") (let ((i 0) (l 5))