의제보기없이 조직 모드 의제에 대한 원시 데이터를 얻는 방법은 무엇입니까?


10

Q :org-mode 실제로 안건보기를 만들지 않고 안건보기에 대한 원시 데이터를 어떻게 반환 할 수 있습니까?

임의의 날 내 의제에 액세스하고 싶습니다. 그러나 나는 의제보기 자체 를 만들고 싶지 않습니다 . 대신, org-mode그 날 의제보기에 들어갈 모든 요소를 ​​수집하고 정렬하여 추가 검사 및 조작을 위해 (이상적으로 목록으로) 반환하려고합니다.

나는 그것이 org-agenda-list시작의 장소 라고 생각했다 . 그러나이 기능은 뒤엉킨 짐승이며 수집, 분류 및 표시 프로세스를 혼합 한 것으로 보입니다. 따라서, 나는 내가 추구하는 기능을 제공하는 어딘가에서 관련 기능을 단순히 놓쳤다 고 가정합니다.

답변:


4

다음은 들어가는 데이터 추출하는 방법의 예이다 축합 *Org Agenda*정상적으로 기능을 사용할 때 버퍼 org-agenda-list로, org-agenda-entry-types예컨대 :deadline, :scheduled, :timestamp, sexp, :deadline*, 및 :scheduled*. 날짜 범위는- beginend-그레고리력 목록 형식이어야합니다 (예 :) '(6 1 2015). 사용자 정의 가능한 바운드 옵션은 org-agenda-prefix-formatorg-agenda-entry-types입니다. 이 함수는 결과를 목록 형식으로 반환합니다.

(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))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.