Làm cách nào để có được dữ liệu thô cho chương trình nghị sự ở chế độ org mà không có chế độ xem chương trình nghị sự?


10

H: Làm cách nào tôi có thể org-modetrả lại dữ liệu thô cho chế độ xem chương trình nghị sự mà không thực sự tạo chế độ xem chương trình nghị sự?

Tôi muốn truy cập chương trình nghị sự của tôi cho một ngày tùy ý. Tuy nhiên, tôi không muốn tạo chế độ xem chương trình nghị sự . Thay vào đó, tôi muốn org-modethu thập và sắp xếp tất cả các yếu tố sẽ đi vào chế độ xem chương trình nghị sự cho ngày hôm đó và trả lại chúng (lý tưởng trong danh sách) để kiểm tra và thao tác thêm.

Tôi đã nghĩ rằng đó org-agenda-listsẽ là nơi để bắt đầu. Tuy nhiên, chức năng đó là một con thú rối và dường như xen kẽ các quá trình thu thập, sắp xếp và hiển thị. Như vậy, tôi cho rằng (hy vọng?) Rằng tôi chỉ đơn giản là đã bỏ lỡ chức năng có liên quan ở đâu đó cung cấp chức năng mà tôi đang theo đuổi.

Câu trả lời:


4

Sau đây là một ví dụ đặc như thế nào để trích xuất các dữ liệu mà đi vào một *Org Agenda*bộ đệm khi bình thường bằng cách sử dụng chức năng org-agenda-list, với org-agenda-entry-typesví dụ như :deadline, :scheduled, :timestamp, sexp, :deadline*, và :scheduled*. Phạm vi ngày - beginend- phải ở định dạng danh sách Gregorian - ví dụ : '(6 1 2015). Các tùy chọn cho phép tùy chỉnh là org-agenda-prefix-formatorg-agenda-entry-types. Hàm trả về một kết quả trong định dạng của một danh sách.

(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))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.