Browse Source

Mark running clock in the agenda.

If the entry currently being clocked is present in the agenda, mark it.
Carsten Dominik 16 năm trước cách đây
mục cha
commit
0af5133334
5 tập tin đã thay đổi với 48 bổ sung0 xóa
  1. 13 0
      lisp/ChangeLog
  2. 21 0
      lisp/org-agenda.el
  3. 7 0
      lisp/org-clock.el
  4. 5 0
      lisp/org-faces.el
  5. 2 0
      lisp/org.el

+ 13 - 0
lisp/ChangeLog

@@ -1,5 +1,18 @@
 2009-08-07  Carsten Dominik  <carsten.dominik@gmail.com>
 2009-08-07  Carsten Dominik  <carsten.dominik@gmail.com>
 
 
+	* org-clock.el (org-clock-save-markers-for-cut-and-paste): Also
+	cheeeeeck the hd marker
+	(org-clock-in): Also set the hd marker.
+	(org-clock-out): Also set the hd marker.
+	(org-clock-cancel): Reset markers.
+
+	* org.el (org-clock-hd-marker): New marker.
+
+	* org-faces.el (org-agenda-clocking): New face.
+
+	* org-agenda.el (org-agenda-mark-clocking-task): New function.
+	(org-finalize-agenda): call `org-agenda-mark-clocking-task'.
+
 	* org.el (org-modules): Add org-track.el.
 	* org.el (org-modules): Add org-track.el.
 
 
 	* org-agenda.el (org-agenda-bulk-marked-p): New function.
 	* org-agenda.el (org-agenda-bulk-marked-p): New function.

+ 21 - 0
lisp/org-agenda.el

@@ -2420,12 +2420,33 @@ bind it in the options section.")
 	(org-agenda-fontify-priorities))
 	(org-agenda-fontify-priorities))
       (when (and org-agenda-dim-blocked-tasks org-blocker-hook)
       (when (and org-agenda-dim-blocked-tasks org-blocker-hook)
 	(org-agenda-dim-blocked-tasks))
 	(org-agenda-dim-blocked-tasks))
+      (org-agenda-mark-clocking-task)
       (run-hooks 'org-finalize-agenda-hook)
       (run-hooks 'org-finalize-agenda-hook)
       (setq org-agenda-type (get-text-property (point) 'org-agenda-type))
       (setq org-agenda-type (get-text-property (point) 'org-agenda-type))
       (when (get 'org-agenda-filter :preset-filter)
       (when (get 'org-agenda-filter :preset-filter)
 	(org-agenda-filter-apply org-agenda-filter))
 	(org-agenda-filter-apply org-agenda-filter))
       )))
       )))
 
 
+(defun org-agenda-mark-clocking-task ()
+  "Mark the current clock entry in the agenda if it is present."
+  (mapc (lambda (o)
+	  (if (eq (org-overlay-get o 'type) 'org-agenda-clocking)
+	      (org-delete-overlay o)))
+	(org-overlays-in (point-min) (point-max)))
+  (when (marker-buffer org-clock-hd-marker)
+    (save-excursion
+      (goto-char (point-min))
+      (let (s ov)
+	(while (setq s (next-single-property-change (point) 'org-hd-marker))
+	  (goto-char s)
+	  (when (equal (get-text-property (point) 'org-hd-marker)
+		       org-clock-hd-marker)
+	    (setq ov (org-make-overlay (point-at-bol) (1+ (point-at-eol))))
+	    (org-overlay-put ov 'type 'org-agenda-clocking)
+	    (org-overlay-put ov 'face 'org-agenda-clocking)
+	    (org-overlay-put ov 'help-echo
+			     "The clock is running in this item")))))))
+
 (defun org-agenda-fontify-priorities ()
 (defun org-agenda-fontify-priorities ()
   "Make highest priority lines bold, and lowest italic."
   "Make highest priority lines bold, and lowest italic."
   (interactive)
   (interactive)

+ 7 - 0
lisp/org-clock.el

@@ -277,6 +277,7 @@ of a different task.")
 (defun org-clock-save-markers-for-cut-and-paste (beg end)
 (defun org-clock-save-markers-for-cut-and-paste (beg end)
   "Save relative positions of markers in region."
   "Save relative positions of markers in region."
   (org-check-and-save-marker org-clock-marker beg end)
   (org-check-and-save-marker org-clock-marker beg end)
+  (org-check-and-save-marker org-clock-hd-marker beg end)
   (org-check-and-save-marker org-clock-default-task beg end)
   (org-check-and-save-marker org-clock-default-task beg end)
   (org-check-and-save-marker org-clock-interrupted-task beg end)
   (org-check-and-save-marker org-clock-interrupted-task beg end)
   (mapc (lambda (m) (org-check-and-save-marker m beg end))
   (mapc (lambda (m) (org-check-and-save-marker m beg end))
@@ -592,6 +593,9 @@ the clocking selection, associated with the letter `d'."
 	      (setq ts (org-insert-time-stamp org-clock-start-time
 	      (setq ts (org-insert-time-stamp org-clock-start-time
 					      'with-hm 'inactive))))
 					      'with-hm 'inactive))))
 	    (move-marker org-clock-marker (point) (buffer-base-buffer))
 	    (move-marker org-clock-marker (point) (buffer-base-buffer))
+	    (move-marker org-clock-hd-marker
+			 (save-excursion (org-back-to-heading t) (point))
+			 (buffer-base-buffer))
 	    (or global-mode-string (setq global-mode-string '("")))
 	    (or global-mode-string (setq global-mode-string '("")))
 	    (or (memq 'org-mode-line-string global-mode-string)
 	    (or (memq 'org-mode-line-string global-mode-string)
 		(setq global-mode-string
 		(setq global-mode-string
@@ -765,6 +769,7 @@ If there is no running clock, throw an error, unless FAIL-QUIETLY is set."
 	    (and (looking-at "\n") (> (point-max) (1+ (point)))
 	    (and (looking-at "\n") (> (point-max) (1+ (point)))
 		 (delete-char 1)))
 		 (delete-char 1)))
 	  (move-marker org-clock-marker nil)
 	  (move-marker org-clock-marker nil)
+	  (move-marker org-clock-hd-marker nil)
 	  (when org-log-note-clock-out
 	  (when org-log-note-clock-out
 	    (org-add-log-setup 'clock-out nil nil nil nil
 	    (org-add-log-setup 'clock-out nil nil nil nil
 			       (concat "# Task: " (org-get-heading t) "\n\n")))
 			       (concat "# Task: " (org-get-heading t) "\n\n")))
@@ -802,6 +807,8 @@ If there is no running clock, throw an error, unless FAIL-QUIETLY is set."
     (set-buffer (marker-buffer org-clock-marker))
     (set-buffer (marker-buffer org-clock-marker))
     (goto-char org-clock-marker)
     (goto-char org-clock-marker)
     (delete-region (1- (point-at-bol)) (point-at-eol)))
     (delete-region (1- (point-at-bol)) (point-at-eol)))
+  (move-marker 'org-clock-marker nil)
+  (move-marker 'org-clock-hd-marker nil)
   (setq global-mode-string
   (setq global-mode-string
 	(delq 'org-mode-line-string global-mode-string))
 	(delq 'org-mode-line-string global-mode-string))
   (force-mode-line-update)
   (force-mode-line-update)

+ 5 - 0
lisp/org-faces.el

@@ -498,6 +498,11 @@ changes."
   (when (fboundp 'set-face-attribute)
   (when (fboundp 'set-face-attribute)
     (set-face-attribute 'org-agenda-date-today nil :weight 'bold :italic 't)))
     (set-face-attribute 'org-agenda-date-today nil :weight 'bold :italic 't)))
 
 
+(unless (facep 'org-agenda-clocking)
+  (copy-face 'secondary-selection 'org-agenda-clocking)
+  (set-face-doc-string 'org-agenda-clocking
+ 		       "Face marking the current clock item in the agenda."))
+
 (unless (facep 'org-agenda-date-weekend)
 (unless (facep 'org-agenda-date-weekend)
   (copy-face 'org-agenda-date 'org-agenda-date-weekend)
   (copy-face 'org-agenda-date 'org-agenda-date-weekend)
   (set-face-doc-string 'org-agenda-date-weekend
   (set-face-doc-string 'org-agenda-date-weekend

+ 2 - 0
lisp/org.el

@@ -3086,6 +3086,8 @@ If TABLE-TYPE is non-nil, also check for table.el-type tables."
 (defvar org-clock-start-time)
 (defvar org-clock-start-time)
 (defvar org-clock-marker (make-marker)
 (defvar org-clock-marker (make-marker)
   "Marker recording the last clock-in.")
   "Marker recording the last clock-in.")
+(defvar org-clock-hd-marker (make-marker)
+  "Marker recording the last clock-in, but the headline position.")
 (defun org-clock-is-active ()
 (defun org-clock-is-active ()
  "Return non-nil if clock is currently running.
  "Return non-nil if clock is currently running.
 The return value is actually the clock marker."
 The return value is actually the clock marker."