Ẩn các mục với một thẻ nhất định trong chương trình nghị sự dựa trên thời gian trong ngày


8

Có thể ẩn các mục với một thẻ nhất định sau tại thời điểm cụ thể trong ngày? Ví dụ: tôi muốn như vậy sau 5 giờ chiều và vào cuối tuần ,: CÔNG VIỆC: các mục không xuất hiện trong chương trình nghị sự.

EDIT: Tôi đang xử lý các mục theo lịch trình và dựa vào chức năng org-agenda-list.


Có, nhưng sẽ hơi chậm nếu bạn có nhiều thời hạn và / hoặc theo lịch trình. Vui lòng chỉnh sửa bài đăng của bạn (hoặc thêm nhận xét) để chỉ định xem bạn đang xử lý thời hạn hoặc theo lịch trình, và nếu cả hai, bạn muốn đánh giá cái nào. Trong tâm trí của tôi, tôi đang nghĩ về một phong tục org-agenda-skip-function. Ngoài ra, xin vui lòng ghi rõ mà trong ba (3) chức năng chính bạn đang dựa vào - org-agenda-list, org-search-view, hoặc org-tags-view.
luật

Câu trả lời:


2

Bạn có thể tùy chỉnh bỏ qua các mục cụ thể org-agendabằng cách sử dụng chức năng bỏ qua . Đây là một hàm (hoặc dạng lisp) sẽ được đánh giá ở mỗi tiêu đề và sẽ trả về nil(để không bỏ qua tiêu đề) hoặc điểm của tiêu đề tiếp theo để xem xét (thường là tiêu đề tiếp theo, nhưng có thể là, ví dụ như anh chị tiếp theo để tăng tốc tìm kiếm).

Trong trường hợp này, chúng ta chỉ cần một hàm để bỏ qua tiêu đề nếu nó có một thẻ nhất định (lấy những cái có org-get-tags-at) và (current-time)sau một giờ nhất định:

(defun skip-tag-after (tag hour)
  (let* ((next-headline (save-excursion
                          (or (outline-next-heading) (point-max))))
        (current-headline (or (and (org-at-heading-p)
                                   (point))
                              (save-excursion (org-back-to-heading))))
        ;; (now (decode-time (current-time)))
        (target (decode-time (current-time)))
        (day (nth 6 target))
        )
    (setcar (last target 7) hour)
    (setcar (last target 8) 0)
    (if (and (member tag (org-get-tags-at current-headline))
             (or (eq day 0)
                 (eq day 6)
                 (time-less-p (apply #'encode-time target) (current-time))))
            next-headline
            nil)))

Điều này không xem xét các ngày trong tuần, nhưng logic đó

Bạn có thể (setq (setq org-agenda-skip-function-global '(skip-tag-after "WORK" 17))bỏ qua các tiêu đề như vậy trên toàn cầu trong mọi chương trình nghị sự hoặc đặt nó được đặt org-agenda-skip-functioncục bộ bên trong org-agenda-custom-commandđể ảnh hưởng đến chương trình nghị sự đó.


Điều gì sẽ xảy ra nếu tôi có một số thẻ như vậy: một thẻ dành cho thời gian làm việc, một thẻ khác dành cho buổi tối 7 ngày một tuần, v.v? Làm cách nào để kết hợp lọc trên tất cả chúng?
Alexander Shcheblikin

Bạn có thể sử dụng một hình thức lisp làm giá trị của org-agenda-skip-functionví dụ bằng cách đặt nó thành(or (skip-tags-after "WORK" 17) (skip-tags-after "HOME" 9))
erikstokes

3

Một cách giải quyết rất đơn giản sẽ là tạo một chế độ xem chương trình nghị sự đặc biệt (hoặc các chế độ xem) mà bạn chỉ sử dụng vào các buổi tối và cuối tuần.

Để đưa ra một ví dụ rất đơn giản, bạn có thể tùy chỉnh org-agenda-custom-commandsbằng cách thêm một cái gì đó như ("x" "No Work" tags-todo "-work" nil). Sau đó vào các buổi tối và cuối tuần, bạn có thể kéo lên xem chương trình nghị sự tổng thể của mình với C-c a x.


Đây là thiết lập hiện tại của tôi và nó hoạt động nhưng tôi đang xem xét một giải pháp thay thế.
David Gagnon

2
org-agenda-custom-commandscũng cho phép bạn thiết lập các chức năng tùy chỉnh ... Bạn hoàn toàn có thể làm những gì bạn muốn theo cách đó (đơn giản if), nhưng tôi không biết rõ đủ để cho bạn thấy chính xác như thế nào.
Brian Z
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.