O seguinte é um exemplo de como condensado para extrair os dados que vai para um *Org Agenda*
tampão, quando normalmente utilizando a função org-agenda-list
, com org-agenda-entry-types
tais como :deadline
, :scheduled
, :timestamp
, sexp
, :deadline*
, e :scheduled*
. O intervalo de datas - begin
e end
- deve estar em um formato de lista gregoriano - por exemplo '(6 1 2015)
,. As opções personalizáveis permitidas são org-agenda-prefix-format
e org-agenda-entry-types
. A função retorna um resultado no formato de uma lista.
(require 'calendar)
(require 'org)
(require 'org-agenda)
(require 'cl)
;; Portions of following code were extracted from:
;; https://github.com/kiwanami/emacs-calfw written by Masashi Sakurai
;; Said code has been modified by @lawlist hereinbelow.
;;
(defun org-get-entries-fn (begin end)
"Return org schedule items between BEGIN and END.
USAGE: (org-get-entries-fn '(6 1 2015) '(12 31 2020))"
(unless
(and
(calendar-date-is-valid-p begin)
(calendar-date-is-valid-p end))
(let ((debug-on-quit nil))
(signal 'quit '("One or both of your Gregorian dates are invalid."))))
(let* (
result
(org-agenda-buffer nil) ;; prevent error from `org-compile-prefix-format'
;; The variable `org-agenda-only-exact-dates' is apparently not operational.
(org-scheduled-past-days 0) ;; avoid duplicate entries for overdue items
(org-agenda-prefix-format "• ")
(org-agenda-entry-types '(:scheduled))
(date-after
(lambda (date num)
"Return the date after NUM days from DATE."
(calendar-gregorian-from-absolute
(+ (calendar-absolute-from-gregorian date) num))))
(enumerate-days
(lambda (begin end)
"Enumerate date objects between BEGIN and END."
(when (> (calendar-absolute-from-gregorian begin)
(calendar-absolute-from-gregorian end))
(error "Invalid period : %S - %S" begin end))
(let ((d begin) ret (cont t))
(while cont
(push (copy-sequence d) ret)
(setq cont (not (equal d end)))
(setq d (funcall date-after d 1)))
(nreverse ret)))) )
(org-compile-prefix-format nil)
(setq result
(loop for date in (funcall enumerate-days begin end) append
(loop for file in (org-agenda-files nil 'ifmode) append
(progn
(org-check-agenda-file file)
(apply 'org-agenda-get-day-entries file date org-agenda-entry-types)))))
result))