Como obter os dados brutos de uma agenda no modo organizacional sem uma visualização da agenda?


10

P: Como posso org-moderetornar os dados brutos para uma visão de agenda sem realmente criar uma visão de agenda?

Gostaria de acessar minha agenda para um dia arbitrário. No entanto, não quero criar uma visão da agenda em si. Em vez disso, quero org-modecoletar e classificar todos os elementos que entrariam na exibição da agenda para esse dia e devolvê-los (idealmente em uma lista) para inspeção e manipulação adicionais.

Eu presumi que esse org-agenda-listseria o lugar para começar. No entanto, essa função é uma fera emaranhada e parece misturar os processos de coleta, classificação e exibição. Como tal, presumo (espero?) Que simplesmente perdi a função relevante em algum lugar que fornece a funcionalidade que procuro.

Respostas:


4

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-typestais como :deadline, :scheduled, :timestamp, sexp, :deadline*, e :scheduled*. O intervalo de datas - begine 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-formate 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))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.