diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el index 9182f72dc..d11fdf13a 100644 --- a/lisp/org-agenda.el +++ b/lisp/org-agenda.el @@ -1098,9 +1098,11 @@ the agenda to display all available LOG items temporarily." (defcustom org-agenda-clock-consistency-checks '(:max-duration "10:00" :min-duration 0 :max-gap "0:05" - :gap-ok-around ("4:00")) - "How to check clock times for consistency. -This is a property list, with the following keys: + :gap-ok-around ("4:00") + :default-face ((:background "DarkRed") (:foreground "white")) + :overlap-face nil :gap-face nil :no-end-time-face nil + :long-face nil :short-face nil) + "This is a property list, with the following keys: :max-duration Mark clocking chunks that are longer than this time. This is a time string like \"HH:MM\", or the number @@ -1122,7 +1124,17 @@ This is a property list, with the following keys: (i.e. a typical lunch time) do not cause a warning. You should have at least one time during the night in this list, or otherwise the first task each morning will trigger - a warning because it follows a long gap." + a warning because it follows a long gap. + +Furthermore, the following properties can be used to define faces for +issue display. + +:default-face the default face, if the specific face is undefined +:overlap-face face for overlapping clocks +:gap-face face for gaps between clocks +:no-end-time-face face for incomplete clocks +:long-face face for clock intervals that are too long +:short-face face for clock intervals that are too short" :group 'org-agenda-daily/weekly :group 'org-clock :type 'plist) @@ -4946,10 +4958,12 @@ See also the user option `org-agenda-clock-consistency-checks'." (or (plist-get pl :max-gap) "30:00"))) (gapok (mapcar 'org-hh:mm-string-to-minutes (plist-get pl :gap-ok-around))) + (def-face (or (plist-get pl :default-face) + '((:background "DarkRed") (:foreground "white")))) issue) (goto-char (point-min)) (while (re-search-forward " Clocked: +(-\\|\\([0-9]+:[0-9]+\\))" nil t) - (setq issue nil) + (setq issue nil face def-face) (catch 'next (setq m (org-get-at-bol 'org-marker) te nil ts nil) @@ -4962,7 +4976,8 @@ See also the user option `org-agenda-clock-consistency-checks'." (error "No valid Clock line") (throw 'next t)) (unless (match-end 3) - (setq issue "No end time") + (setq issue "No end time" + face (or (plist-get pl :no-end-time-face) face)) (throw 'next t)) (setq ts (match-string 1) te (match-string 3) @@ -4976,20 +4991,25 @@ See also the user option `org-agenda-clock-consistency-checks'." ;; a very long clocking chunk (setq issue (format "Clocking interval is very long: %s" (org-minutes-to-hh:mm-string - (floor (/ (float dt) 60.)))))) + (floor (/ (float dt) 60.)))) + face (or (plist-get pl :long-face) face))) ((< dt (* 60 mintime)) ;; a very short clocking chunk (setq issue (format "Clocking interval is very short: %s" (org-minutes-to-hh:mm-string - (floor (/ (float dt) 60.)))))) + (floor (/ (float dt) 60.)))) + face (or (plist-get pl :short-face) face))) ((and (> tlend 0) (< ts tlend)) ;; Two clock entries are overlapping - (setq issue (format "Clocking overlap: %d minutes" (/ (- tlend ts) 60)))) + (setq issue (format "Clocking overlap: %d minutes" + (/ (- tlend ts) 60)) + face (or (plist-get pl :overlap-face) face))) ((and (> tlend 0) (> ts (+ tlend (* 60 maxgap)))) ;; There is a gap, lets see if we need to report it (unless (org-agenda-check-clock-gap tlend ts gapok) (setq issue (format "Clocking gap: %d minutes" - (/ (- ts tlend) 60))))) + (/ (- ts tlend) 60)) + face (or (plist-get pl :gap-face) face)))) (t nil))) (setq tlend (or te tlend) tlstart (or ts tlstart)) (when issue @@ -5000,7 +5020,7 @@ See also the user option `org-agenda-clock-consistency-checks'." (org-add-props (format "%-43s" (concat " " issue)) nil - 'face '((:background "DarkRed") (:foreground "white"))) + 'face face) "\n")) (overlay-put ov 'evaporate t)))))