mirror of
https://git.savannah.gnu.org/git/emacs/org-mode.git
synced 2024-09-29 22:07:49 +00:00
org-agenda: Support for dimming local to each agenda.
Composite agenda views could not separately specify whether to dim blocked tasks. * lisp/org-agenda.el (org-agenda--mark-blocked-entry): New function. (org-agenda-dim-blocked-tasks): Modified to work with text properties set by org-agenda--marked-blocked-entry.
This commit is contained in:
parent
6d50e167ca
commit
912a385518
|
@ -3886,35 +3886,53 @@ dimming them."
|
|||
(when (eq (overlay-get o 'org-type) 'org-blocked-todo)
|
||||
(delete-overlay o)))
|
||||
(save-excursion
|
||||
(let ((inhibit-read-only t)
|
||||
(org-depend-tag-blocked nil)
|
||||
org-blocked-by-checkboxes)
|
||||
(let ((inhibit-read-only t))
|
||||
(goto-char (point-min))
|
||||
(while (let ((pos (text-property-not-all
|
||||
(point) (point-max) 'todo-state nil)))
|
||||
(point) (point-max) 'org-todo-blocked nil)))
|
||||
(when pos (goto-char pos)))
|
||||
(setq org-blocked-by-checkboxes nil)
|
||||
(let ((marker (org-get-at-bol 'org-hd-marker)))
|
||||
(when (and (markerp marker)
|
||||
(with-current-buffer (marker-buffer marker)
|
||||
(save-excursion (goto-char marker)
|
||||
(org-entry-blocked-p))))
|
||||
;; Entries blocked by checkboxes cannot be made invisible.
|
||||
;; See `org-agenda-dim-blocked-tasks' for details.
|
||||
(let* ((really-invisible
|
||||
(and (not org-blocked-by-checkboxes)
|
||||
(or invisible (eq org-agenda-dim-blocked-tasks
|
||||
'invisible))))
|
||||
(ov (make-overlay (if really-invisible (line-end-position 0)
|
||||
(line-beginning-position))
|
||||
(line-end-position))))
|
||||
(if really-invisible (overlay-put ov 'invisible t)
|
||||
(overlay-put ov 'face 'org-agenda-dimmed-todo-face))
|
||||
(overlay-put ov 'org-type 'org-blocked-todo))))
|
||||
(let* ((invisible (eq (org-get-at-bol 'org-todo-blocked) 'invisible))
|
||||
(ov (make-overlay (if invisible
|
||||
(line-end-position 0)
|
||||
(line-beginning-position))
|
||||
(line-end-position))))
|
||||
(if invisible
|
||||
(overlay-put ov 'invisible t)
|
||||
(overlay-put ov 'face 'org-agenda-dimmed-todo-face))
|
||||
(overlay-put ov 'org-type 'org-blocked-todo))
|
||||
(forward-line))))
|
||||
(when (called-interactively-p 'interactive)
|
||||
(message "Dim or hide blocked tasks...done")))
|
||||
|
||||
(defun org-agenda--mark-blocked-entry (entry)
|
||||
"For ENTRY a string with the text property `org-hd-marker', if
|
||||
the header at `org-hd-marker' is blocked according to
|
||||
`org-entry-blocked-p', then if `org-agenda-dim-blocked-tasks' is
|
||||
'invisible and the header is not blocked by checkboxes, set the
|
||||
text property `org-todo-blocked' to 'invisible, otherwise set it
|
||||
to t."
|
||||
(when (get-text-property 0 'todo-state entry)
|
||||
(let ((entry-marker (get-text-property 0 'org-hd-marker entry))
|
||||
(org-blocked-by-checkboxes nil)
|
||||
;; Necessary so that `org-entry-blocked-p' does not change
|
||||
;; the buffer.
|
||||
(org-depend-tag-blocked nil))
|
||||
(when entry-marker
|
||||
(let ((blocked
|
||||
(with-current-buffer (marker-buffer entry-marker)
|
||||
(save-excursion
|
||||
(goto-char entry-marker)
|
||||
(org-entry-blocked-p)))))
|
||||
(when blocked
|
||||
(let ((really-invisible
|
||||
(and (not org-blocked-by-checkboxes)
|
||||
(eq org-agenda-dim-blocked-tasks 'invisible))))
|
||||
(put-text-property
|
||||
0 (length entry) 'org-todo-blocked
|
||||
(if really-invisible 'invisible t)
|
||||
entry))))))
|
||||
entry))
|
||||
|
||||
(defvar org-agenda-skip-function nil
|
||||
"Function to be called at each match during agenda construction.
|
||||
If this function returns nil, the current match should not be skipped.
|
||||
|
@ -6781,6 +6799,8 @@ The optional argument TYPE tells the agenda type."
|
|||
(setq list (org-agenda-limit-entries list 'tags max-tags)))
|
||||
(when max-entries
|
||||
(setq list (org-agenda-limit-entries list 'org-hd-marker max-entries)))
|
||||
(when (and org-agenda-dim-blocked-tasks org-blocker-hook)
|
||||
(setq list (mapcar #'org-agenda--mark-blocked-entry list)))
|
||||
(mapconcat 'identity list "\n")))
|
||||
|
||||
(defun org-agenda-limit-entries (list prop limit &optional fn)
|
||||
|
|
Loading…
Reference in a new issue