Function: org-agenda-list-stuck-projects

org-agenda-list-stuck-projects is an autoloaded, interactive and byte-compiled function defined in org-agenda.el.gz.

Signature

(org-agenda-list-stuck-projects &rest IGNORE)

Documentation

Create agenda view for projects that are stuck.

Stuck projects are project that have no next actions. For the definitions of what a project is and how to check if it stuck, customize the variable org-stuck-projects.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-agenda.el.gz
;;;###autoload
(defun org-agenda-list-stuck-projects (&rest _ignore)
  "Create agenda view for projects that are stuck.
Stuck projects are project that have no next actions.  For the definitions
of what a project is and how to check if it stuck, customize the variable
`org-stuck-projects'."
  (interactive)
  (let* ((org-agenda-overriding-header
	  (or org-agenda-overriding-header "List of stuck projects: "))
	 (matcher (nth 0 org-stuck-projects))
	 (todo (nth 1 org-stuck-projects))
	 (tags (nth 2 org-stuck-projects))
	 (gen-re (org-string-nw-p (nth 3 org-stuck-projects)))
	 (todo-wds
	  (if (not (member "*" todo)) todo
	    (org-agenda-prepare-buffers (org-agenda-files nil 'ifmode))
	    (org-delete-all org-done-keywords-for-agenda
			    (copy-sequence org-todo-keywords-for-agenda))))
	 (todo-re (and todo
		       (format "^\\*+[ \t]+\\(%s\\)\\(?:[ \t]\\|$\\)"
			       (mapconcat #'regexp-quote todo-wds "\\|"))))
	 (tags-re (cond ((null tags) nil)
			((member "*" tags) org-tag-line-re)
			(tags
			 (let ((other-tags (format "\\(?:%s:\\)*" org-tag-re)))
			   (concat org-outline-regexp-bol
				   ".*?[ \t]:"
				   other-tags
				   (regexp-opt tags t)
				   ":" other-tags "[ \t]*$")))
			(t nil)))
	 (re-list (delq nil (list todo-re tags-re gen-re)))
	 (skip-re
	  (if (null re-list)
	      (error "Missing information to identify unstuck projects")
	    (mapconcat #'identity re-list "\\|")))
	 (org-agenda-skip-function
	  ;; Skip entry if `org-agenda-skip-regexp' matches anywhere
	  ;; in the subtree.
	  (lambda ()
	    (and (save-excursion
		   (let ((case-fold-search nil))
		     (re-search-forward
		      skip-re (save-excursion (org-end-of-subtree t)) t)))
		 (progn (outline-next-heading) (point))))))
    (org-tags-view nil matcher)
    (setq org-agenda-buffer-name (buffer-name))
    (with-current-buffer org-agenda-buffer-name
      (setq org-agenda-redo-command
	    `(org-agenda-list-stuck-projects ,current-prefix-arg))
      (let ((inhibit-read-only t))
        (add-text-properties
         (point-min) (point-max)
         `(org-redo-cmd ,org-agenda-redo-command))))))