Function: org-agenda-get-day-entries
org-agenda-get-day-entries is a byte-compiled function defined in
org-agenda.el.gz.
Signature
(org-agenda-get-day-entries FILE DATE &rest ARGS)
Documentation
Does the work for org-diary and org-agenda.
FILE is the path to a file to be checked for entries. DATE is date like
the one returned by calendar-current-date. ARGS are symbols indicating
which kind of entries should be extracted. For details about these, see
the documentation of org-diary.
Source Code
;; Defined in /usr/src/emacs/lisp/org/org-agenda.el.gz
(defun org-agenda-get-day-entries (file date &rest args)
"Does the work for `org-diary' and `org-agenda'.
FILE is the path to a file to be checked for entries. DATE is date like
the one returned by `calendar-current-date'. ARGS are symbols indicating
which kind of entries should be extracted. For details about these, see
the documentation of `org-diary'."
(let* ((org-startup-folded nil)
(org-startup-align-all-tables nil)
(buffer (if (file-exists-p file) (org-get-agenda-file-buffer file)
(error "No such file %s" file))))
(if (not buffer)
;; If file does not exist, signal it in diary nonetheless.
(list (format "ORG-AGENDA-ERROR: No such org-file %s" file))
(with-current-buffer buffer
(unless (derived-mode-p 'org-mode)
(error "Agenda file %s is not in Org mode" file))
(setq org-agenda-buffer (or org-agenda-buffer buffer))
(setf org-agenda-current-date date)
(save-excursion
(save-restriction
(if (eq buffer org-agenda-restrict)
(narrow-to-region org-agenda-restrict-begin
org-agenda-restrict-end)
(widen))
;; Rationalize ARGS. Also make sure `:deadline' comes
;; first in order to populate DEADLINES before passing it.
;;
;; We use `delq' since `org-uniquify' duplicates ARGS,
;; guarding us from modifying `org-agenda-entry-types'.
(setf args (org-uniquify (or args org-agenda-entry-types)))
(when (and (memq :scheduled args) (memq :scheduled* args))
(setf args (delq :scheduled* args)))
(cond
((memq :deadline args)
(setf args (cons :deadline
(delq :deadline (delq :deadline* args)))))
((memq :deadline* args)
(setf args (cons :deadline* (delq :deadline* args)))))
;; Collect list of headlines. Return them flattened.
(let ((case-fold-search nil) results deadlines)
(org-dlet
((date date))
(dolist (arg args (apply #'nconc (nreverse results)))
(pcase arg
((and :todo (guard (org-agenda-today-p date)))
(push (org-agenda-get-todos) results))
(:timestamp
(push (org-agenda-get-blocks) results)
(push (org-agenda-get-timestamps deadlines) results))
(:sexp
(push (org-agenda-get-sexps) results))
(:scheduled
(push (org-agenda-get-scheduled deadlines) results))
(:scheduled*
(push (org-agenda-get-scheduled deadlines t) results))
(:closed
(push (org-agenda-get-progress) results))
(:deadline
(setf deadlines (org-agenda-get-deadlines))
(push deadlines results))
(:deadline*
(setf deadlines (org-agenda-get-deadlines t))
(push deadlines results))))))))))))