Jak uzyskać surowe dane dla planu w trybie organizacji bez widoku planu?


10

P: Jak mogę org-modezwrócić nieprzetworzone dane dla widoku planu bez faktycznego tworzenia widoku planu?

Chciałbym uzyskać dostęp do mojego programu na dowolny dzień. Nie chcę jednak tworzyć widoku agendy per se. Zamiast tego chcę org-modezebrać i posortować wszystkie elementy, które przejdą do widoku planu na ten dzień i zwrócić je (najlepiej na liście) do dalszej kontroli i manipulacji.

Przypuszczałem, że org-agenda-listto będzie miejsce na początek. Jednak ta funkcja jest splątaną bestią i wydaje się, że przenika procesy gromadzenia, sortowania i wyświetlania. W związku z tym zakładam (mam nadzieję?), Że po prostu przegapiłem odpowiednią funkcję, która zapewnia funkcjonalność, której szukam.

Odpowiedzi:


4

Poniżej podano skrócone przykład sposobu wyodrębniania danych, które przechodzi w *Org Agenda*buforze podczas normalnego korzystania z funkcji org-agenda-listz org-agenda-entry-typestakich jak :deadline, :scheduled, :timestamp, sexp, :deadline*, i :scheduled*. Zakres dat - begini end- powinien być w formacie listy gregoriańskiej - np '(6 1 2015). Możliwe do dostosowania opcje „let-bound” to org-agenda-prefix-formati org-agenda-entry-types. Funkcja zwraca wynik w formacie listy.

(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))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.