Come ottenere i dati non elaborati per un'agenda in modalità organizzazione senza una vista agenda?


10

D: Come posso org-moderestituire i dati non elaborati per una vista agenda senza effettivamente creare una vista agenda?

Vorrei accedere alla mia agenda per una giornata arbitraria. Tuttavia, non voglio creare una vista agenda di per sé. Invece, voglio org-moderaccogliere e ordinare tutti gli elementi che andrebbero nella vista dell'agenda per quel giorno e restituirli (idealmente in un elenco) per ulteriori ispezioni e manipolazioni.

Avevo presunto che org-agenda-listsarebbe stato il punto di partenza. Tuttavia, quella funzione è una bestia aggrovigliata e sembra mescolare i processi di raccolta, smistamento e visualizzazione. In quanto tale, presumo (spero?) Di aver semplicemente perso la funzione rilevante da qualche parte che fornisce la funzionalità che sto cercando.

Risposte:


4

Quanto segue è un esempio di come condensata per estrarre i dati che va in un *Org Agenda*buffer quando normalmente utilizzando la funzione org-agenda-list, con org-agenda-entry-typesad esempio :deadline, :scheduled, :timestamp, sexp, :deadline*, e :scheduled*. L'intervallo di date - begine end- dovrebbe essere in un formato di elenco gregoriano - ad es '(6 1 2015). Le opzioni personalizzabili let sono org-agenda-prefix-formate org-agenda-entry-types. La funzione restituisce un risultato nel formato di un elenco.

(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))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.