Function: org-agenda-get-progress

org-agenda-get-progress is a byte-compiled function defined in org-agenda.el.gz.

Signature

(org-agenda-get-progress)

Documentation

Return the logged TODO entries for agenda display.

Aliases

org-get-closed

Source Code

;; Defined in /usr/src/emacs/lisp/org/org-agenda.el.gz
(defun org-agenda-get-progress ()
  "Return the logged TODO entries for agenda display."
  (with-no-warnings (defvar date))
  (let* ((props (list 'mouse-face 'highlight
		      'org-not-done-regexp org-not-done-regexp
		      'org-todo-regexp org-todo-regexp
		      'org-complex-heading-regexp org-complex-heading-regexp
		      'help-echo
		      (format "mouse-2 or RET jump to org file %s"
			      (abbreviate-file-name buffer-file-name))))
	 (items (if (consp org-agenda-show-log-scoped)
		    org-agenda-show-log-scoped
		  (if (eq org-agenda-show-log-scoped 'clockcheck)
		      '(clock)
		    org-agenda-log-mode-items)))
	 (parts
	  (delq nil
		(list
		 (when (memq 'closed items) (concat "\\<" org-closed-string))
		 (when (memq 'clock items) (concat "\\<" org-clock-string))
		 (when (memq 'state items)
		   (format "- +State \"%s\".*?" org-todo-regexp)))))
	 (parts-re (if parts (mapconcat #'identity parts "\\|")
		     (error "`org-agenda-log-mode-items' is empty")))
	 (regexp (concat
		  "\\(" parts-re "\\)"
		  " *\\["
		  (regexp-quote
		   (format-time-string
                    "%Y-%m-%d" ; We do not use `org-time-stamp-format' to not demand day name in timestamps.
		    (org-encode-time  ; DATE bound by calendar
		     0 0 0 (nth 1 date) (car date) (nth 2 date))))))
	 (org-agenda-search-headline-for-time nil)
	 marker hdmarker priority category level tags closedp type
	 statep clockp state ee txt extra timestr rest clocked inherited-tags
         effort effort-minutes)
    (goto-char (point-min))
    (while (re-search-forward regexp nil t)
      (catch :skip
	(org-agenda-skip)
	(setq marker (org-agenda-new-marker (match-beginning 0))
	      closedp (equal (match-string 1) org-closed-string)
	      statep (equal (string-to-char (match-string 1)) ?-)
	      clockp (not (or closedp statep))
	      state (and statep (match-string 2))
	      category (save-match-data (org-get-category (match-beginning 0)))
	      timestr (buffer-substring (match-beginning 0) (line-end-position))
              effort (save-match-data (or (get-text-property (point) 'effort)
                                          (org-entry-get (point) org-effort-property))))
        (setq effort-minutes (when effort (save-match-data (org-duration-to-minutes effort))))
	(when (string-match org-ts-regexp-inactive timestr)
	  ;; substring should only run to end of time stamp
	  (setq rest (substring timestr (match-end 0))
		timestr (substring timestr 0 (match-end 0)))
	  (if (and (not closedp) (not statep)
		   (string-match "\\([0-9]\\{1,2\\}:[0-9]\\{2\\}\\)\\].*?\\([0-9]\\{1,2\\}:[0-9]\\{2\\}\\)"
				 rest))
	      (progn (setq timestr (concat (substring timestr 0 -1)
					   "-" (match-string 1 rest) "]"))
		     (setq clocked (match-string 2 rest)))
	    (setq clocked "-")))
	(save-excursion
	  (setq extra
		(cond
		 ((not org-agenda-log-mode-add-notes) nil)
		 (statep
		  (and (looking-at ".*\\\\\n[ \t]*\\([^-\n \t].*?\\)[ \t]*$")
		       (match-string 1)))
		 (clockp
		  (and (looking-at ".*\n[ \t]*-[ \t]+\\([^-\n \t].*?\\)[ \t]*$")
		       (match-string 1)))))
	  (if (not (re-search-backward org-outline-regexp-bol nil t))
	      (throw :skip nil)
	    (goto-char (match-beginning 0))
	    (setq hdmarker (org-agenda-new-marker)
		  inherited-tags
		  (or (eq org-agenda-show-inherited-tags 'always)
		      (and (listp org-agenda-show-inherited-tags)
			   (memq 'todo org-agenda-show-inherited-tags))
		      (and (eq org-agenda-show-inherited-tags t)
			   (or (eq org-agenda-use-tag-inheritance t)
			       (memq 'todo org-agenda-use-tag-inheritance))))
		  tags (org-get-tags nil (not inherited-tags))
		  level (make-string (org-reduced-level (org-outline-level)) ? ))
	    (looking-at "\\*+[ \t]+\\([^\r\n]+\\)")
	    (setq txt (match-string 1))
	    (when extra
	      (if (string-match "\\([ \t]+\\)\\(:[^ \n\t]*?:\\)[ \t]*$" txt)
		  (setq txt (concat (substring txt 0 (match-beginning 1))
				    " - " extra " " (match-string 2 txt)))
		(setq txt (concat txt " - " extra))))
	    (setq txt (org-agenda-format-item
		       (cond
			(closedp "Closed:    ")
			(statep (concat "State:     (" state ")"))
			(t (concat "Clocked:   (" clocked  ")")))
                       (org-add-props txt nil
                         'effort effort
                         'effort-minutes effort-minutes)
		       level category tags timestr)))
	  (setq type (cond (closedp "closed")
			   (statep "state")
			   (t "clock")))
	  (setq priority 100000)
	  (org-add-props txt props
	    'org-marker marker 'org-hd-marker hdmarker 'face 'org-agenda-done
	    'urgency priority 'priority priority 'level level
            'effort effort 'effort-minutes effort-minutes
	    'type type 'date date
	    'undone-face 'org-warning 'done-face 'org-agenda-done)
	  (push txt ee))
        (goto-char (line-end-position))))
    (nreverse ee)))