Comment obtenir les données brutes pour un agenda en mode organisationnel sans vue d'agenda?


10

Q: Comment puis-je org-moderenvoyer les données brutes pour une vue d'agenda sans réellement créer une vue d'agenda?

Je voudrais accéder à mon agenda pour une journée arbitraire. Cependant, je ne veux pas créer une vue de l'agenda en soi. Au lieu de cela, je veux org-modecollecter et trier tous les éléments qui iraient dans la vue de l'agenda pour ce jour et les retourner (idéalement dans une liste) pour une inspection et une manipulation supplémentaires.

J'avais présumé que ce org-agenda-listserait le point de départ. Cependant, cette fonction est une bête enchevêtrée et semble mêler les processus de collecte, de tri et d'affichage. En tant que tel, je suppose (j'espère?) Que j'ai simplement raté la fonction pertinente quelque part qui fournit la fonctionnalité que je recherche.

Réponses:


4

Ce qui suit est un exemple de la façon condensée pour extraire les données qui entre dans un *Org Agenda*tampon pour l'utilisation de la fonction normalement org-agenda-listavec, org-agenda-entry-typestels que :deadline, :scheduled, :timestamp, sexp, :deadline*, et :scheduled*. La plage de dates - beginet end- doit être dans un format de liste grégorien - par exemple '(6 1 2015). Les options personnalisées liées à la lettre sont org-agenda-prefix-formatet org-agenda-entry-types. La fonction renvoie un résultat au format d'une liste.

(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))
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.