chương trình nghị sự để làm nỗ lực


7

Bạn có thể sử dụng org-agenda-prefix-formatđể hiển thị nỗ lực cho từng tiêu đề TODO:

(setq org-agenda-custom-commands
      '(("c" "My TODOs"
         ((tags-todo "mytag"
                     ((org-agenda-prefix-format " %6e ")))))))

Điều này cho thấy một cái gì đó như:

       TODO Some patent task
[0:30] ..TODO Some sub-task
[0:30] ..TODO Some other sub-task

Không giống như đồng hồ, nỗ lực của các nhiệm vụ phụ không được tóm tắt cho nhiệm vụ mẹ. Tôi muốn nó trông như thế này:

[1:00] TODO Some patent task
[0:30] ..TODO Some sub-task
[0:30] ..TODO Some other sub-task

Nhìn vào tài liệu cho org-agenda-prefix-formatthấy không có gì tương tự như %evậy cũng không tóm tắt, nhưng có một cái chung %(expression), không có lời giải thích.

Điều gì %(expression)sẽ cho tôi đầu ra như trên?

Câu trả lời:


5

Hóa ra đó %(expression)không phải là một hàm được truyền bất kỳ đối số nào, nhưng hàm (point)này được đặt thành tiêu đề hiện tại khi nó được xử lý, vì vậy bạn có thể viết một cái gì đó như:

(org-agenda-prefix-format " %e %(or (org-entry-get (point) "Effort") "0:00") ")

... Và những nỗ lực được báo cáo nên đồng ý với %e.

Bây giờ, org-entry-getkhông hỗ trợ tìm kiếm lên hệ thống phân cấp nếu tài sản không được thiết lập vào mục hiện tại, nhưng những gì cần thiết là thu thập tất cả các thuộc tính xuống hệ thống phân cấp, vì vậy chúng ta có thể tổng hợp các nỗ lực.

Đây là lần đầu tiên:

(defun my-org-entry-get-subtree (property)
  (save-excursion
    (save-restriction
      (org-narrow-to-subtree)
      (goto-char (point-max))
      (save-match-data
        (cl-loop while (re-search-backward org-heading-regexp nil t)
                 collect (org-entry-get (point) property))))))

Mà có thể được sử dụng để tổng hợp những nỗ lực:

(defun my-org-effort-sum-current-item ()
  (org-minutes-to-hh:mm-string
    (cl-loop for minutes in (my-org-entry-get-subtree "Effort")
             sum (org-hh:mm-string-to-minutes (or minutes "0:00")))))

Vấn đề: nếu bạn có một TODO với 3 TODO phụ mỗi lần với một giờ nỗ lực và bạn hoàn thành một TODO phụ, tổng nỗ lực còn lại là 2 giờ. Nhưng đoạn mã trên bao gồm nỗ lực từ vật phẩm ở trạng thái DONE, ghi sai 3 giờ.

Chúng tôi phải chỉ khớp các mục trong cây con ở trạng thái TODO:

(defun my-org-effort-sum-current-item-in-state (state)
  (org-minutes-to-hh:mm-string
    (cl-loop for minutes in (my-org-entry-subtree-in-state-get state "Effort")
             sum (org-hh:mm-string-to-minutes (or minutes "0:00")))))

(defun my-org-entry-subtree-in-state-get (state property)
  (save-excursion
    (save-restriction
      (org-narrow-to-subtree)
      (goto-char (point-max))
      (save-match-data
        (cl-loop while (re-search-backward org-heading-regexp nil t)
                 when (string-equal state (org-get-todo-state))
                 collect (org-entry-get (point) property))))))

Thêm phần này vào org-agenda-prefix-format:

(setq org-agenda-custom-commands
      '(("c" "My TODOs"
         ((tags-todo "mytag"
                     ((org-agenda-prefix-format "[%(my-org-effort-sum-current-item-in-state "TODO")] ")
                      (org-tags-match-list-sublevels t)))))))

... Và bạn kết thúc với một cái gì đó như thế này:

Projects
[3:00] TODO Some Project Task
[1:00] TODO Sub-task A
[1:00] TODO Sub-task B
[1:00] TODO Sub-task C

(xem câu hỏi khác này để biết cách thực hiện các tác vụ phụ)

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.