Wie erhalte ich die Rohdaten für eine Agenda im Organisationsmodus ohne Agendaansicht?


10

F: Wie kann ich org-modedie Rohdaten für eine Agenda-Ansicht zurückgeben, ohne tatsächlich eine Agenda-Ansicht zu erstellen?

Ich möchte für einen beliebigen Tag auf meine Agenda zugreifen. Ich möchte jedoch keine Agenda-Ansicht per se erstellen . Stattdessen möchte ich org-modealle Elemente sammeln und sortieren, die in die Tagesordnungsansicht für diesen Tag aufgenommen werden, und sie (idealerweise in einer Liste) zur weiteren Überprüfung und Bearbeitung zurückgeben.

Ich hatte angenommen, dass org-agenda-listdies der Ausgangspunkt sein würde. Diese Funktion ist jedoch ein Wirrwarr und scheint die Sammel-, Sortier- und Anzeigeprozesse zu vermischen. Daher gehe ich davon aus (hoffe?), Dass ich einfach irgendwo die relevante Funktion verpasst habe, die die Funktionalität bietet, nach der ich suche.

Antworten:


4

Das Folgende ist ein kondensiertes Beispiel, wie die Daten zu extrahieren , die in einen geht *Org Agenda*Puffer , wenn normalerweise die Funktion org-agenda-list, mit org-agenda-entry-typeswie :deadline, :scheduled, :timestamp, sexp, :deadline*, und :scheduled*. Der Datumsbereich - beginund end- sollte in einem gregorianischen Listenformat vorliegen - z '(6 1 2015). Die anpassbaren let-gebundenen Optionen sind org-agenda-prefix-formatund org-agenda-entry-types. Die Funktion gibt ein Ergebnis im Format einer Liste zurück.

(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))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.