Đường phân chia trong chương trình nghị sự org?


12

H : Tôi có thể đặt các vạch chia trong orgchế độ xem chương trình nghị sự của mình không?

Bộ đệm chương trình nghị sự của tôi có thể có một chút bận rộn khi tôi có rất nhiều thứ do. Sự bận rộn này có tác dụng phản tác dụng khiến tôi tránh nhìn vào chương trình nghị sự của mình vì nó làm tôi bối rối. Tôi đang tìm kiếm một cách để làm cho nó bớt khó khăn hơn.

Một điều tôi muốn là có thể đặt các dòng chia (ví dụ: chỉ một dòng dấu gạch ngang) ở giữa các mục chương trình nghị sự:

  • có thời hạn hôm nay
  • đã quá thời hạn của họ (quá hạn X ngày) và
  • có thời hạn sắp tới (do trong X ngày).

Có thể đặt các vạch chia trong chế độ xem chương trình nghị sự không? Nếu có, làm thế nào tôi làm điều đó?


Trong một câu hỏi bán liên quan có tên Làm thế nào để có được dữ liệu thô cho chương trình nghị sự ở chế độ tối đa mà không có chế độ xem chương trình nghị sự? , Tôi đã đăng câu trả lời minh họa cách lấy dữ liệu thô: emacs.stackexchange.com/a/12563/2287 Bạn có thể sửa đổi dữ liệu đó cho phù hợp với nhu cầu của mình, bao gồm, nhưng không giới hạn ở: replace-regexp-in-string(thêm dòng chia và / hoặc dòng mới như bạn mong muốn); bạn có thể có một string-equalshoặc phù hợp với tiêu chí nhất định hoặc bất kỳ tiêu chí nào khác mà bạn tìm kiếm. Kiểm tra các thuộc tính văn bản hiện có với các giá trị để làm quen với những gì được đưa ra ngoài hộp, sau đó sử dụng chúng.
luật

Với một tách cà phê tươi trong tay, tôi nghĩ ra một phương pháp dễ dàng hơn bằng cách sử dụng org-modedữ liệu thô thậm chí không liên quan đến việc thao túng dữ liệu bằng cách thay thế bất kỳ phần nào của chuỗi. Tức là, chỉ cần kiểm tra các thuộc tính văn bản và nếu chúng phù hợp với tiêu chí của bạn, hãy chèn một cái gì đó giống như một dòng trước hoặc sau khi bộ đệm đang được điền mapcarvào trong ví dụ của liên kết ở trên. Dự án này có thể hình dung đòi hỏi một chút thời gian để thực hiện để tạo một org-agendabộ đệm tùy chỉnh và ví dụ này không được xem xét org-search-viewhoặc org-tags-view- chỉ, chỉ org-agenda-list.
luật

Câu trả lời:


2

org-agenda-block-separator

Dấu phân cách giữa các khối trong chương trình nghị sự. Nếu đây là một chuỗi, nó sẽ được sử dụng làm dấu phân cách, với một dòng mới được thêm vào. Nếu nó là một ký tự, nó sẽ được lặp lại để lấp đầy chiều rộng cửa sổ. Nếu nil thì dải phân cách bị vô hiệu hóa. Trong org-agenda-custom-commandsđịa chỉ này, dải phân cách giữa khối hiện tại và khối trước đó.


org-agenda-compact-blocks

Non-nil có nghĩa là làm cho chương trình nghị sự khối nhỏ gọn hơn. Điều này được thực hiện trên toàn cầu bằng cách loại bỏ các dòng như tên nhịp chương trình và số tuần hoặc các dòng phân cách.


1
Cảm ơn, nhưng bạn có thể đưa ra một ví dụ về cách người ta sẽ sử dụng điều này trong chế độ xem chương trình nghị sự không?
Dân

1

Bạn có thể có nhiều khối trong chế độ xem chương trình nghị sự, mỗi khối có tìm kiếm riêng bằng cách ghép một số lệnh tùy chỉnh:

(setq org-agenda-custom-commands
      '(("D" "Deadlines"
         ((tags-todo "DEADLINE=\"<today>\""
                     ((org-agenda-overriding-header "Due Today"))
                     )
          (tags-todo "DEADLINE<\"<today>\""
                     ((org-agenda-overriding-header "You're Late")))
          (tags-todo "+DEADLINE<\"<+5d>\"+DEADLINE>\"<today>\""
                     ((org-agenda-overriding-header "Better get on it")))
         ))))

Bạn cũng có thể đặt một danh sách các tùy chọn ở cuối sẽ áp dụng cho tất cả các khối.

Nhược điểm này là mỗi khối được tính riêng nên việc này mất 3 lần thời gian để tạo như một chương trình nghị sự


1

Sau đây là một ví dụ về cách kiểm tra các thuộc tính văn bản của các mục được tạo bởi org-agenda-listvà sửa đổi chuỗi dựa trên các tiêu chí nhất định. Trong ví dụ này, giá trị của thuộc tính văn bản ts-dateđược lấy và so sánh với ngày hiện tại - nếu quá hạn, chúng tôi thêm OLD:; nếu nó là hiện tại, chúng tôi thêm CURRENT:, nếu tương lai của nó, chúng tôi thêm FUTURE:. Người đăng ban đầu có thể tùy chỉnh ví dụ này thêm một dòng mới và / hoặc một dòng chia tại các vị trí được chọn. Tùy chỉnh có thể thay đổi tùy theo tiêu chí sắp xếp được chọn bởi người đăng ban đầu trong org-agenda-sorting-strategy, v.v.

Trong ví dụ này, hàm org-agenda-finalize-entriesđã được sửa đổi ở gần cuối giữa các phần được gắn nhãn ;; BEGIN modification;; END modification.

(require 'org-agenda)

(defun org-agenda-finalize-entries (list &optional type)
  "Sort, limit and concatenate the LIST of agenda items.
The optional argument TYPE tells the agenda type."
  (let ((max-effort (cond ((listp org-agenda-max-effort)
         (cdr (assoc type org-agenda-max-effort)))
        (t org-agenda-max-effort)))
  (max-todo (cond ((listp org-agenda-max-todos)
       (cdr (assoc type org-agenda-max-todos)))
      (t org-agenda-max-todos)))
  (max-tags (cond ((listp org-agenda-max-tags)
       (cdr (assoc type org-agenda-max-tags)))
      (t org-agenda-max-tags)))
  (max-entries (cond ((listp org-agenda-max-entries)
          (cdr (assoc type org-agenda-max-entries)))
         (t org-agenda-max-entries))) l)
    (when org-agenda-before-sorting-filter-function
      (setq list
      (delq nil
      (mapcar
       org-agenda-before-sorting-filter-function list))))
    (setq list (mapcar 'org-agenda-highlight-todo list)
    list (mapcar 'identity (sort list 'org-entries-lessp)))
    (when max-effort
      (setq list (org-agenda-limit-entries
      list 'effort-minutes max-effort 'identity)))
    (when max-todo
      (setq list (org-agenda-limit-entries list 'todo-state max-todo)))
    (when max-tags
      (setq list (org-agenda-limit-entries list 'tags max-tags)))
    (when max-entries
      (setq list (org-agenda-limit-entries list 'org-hd-marker max-entries)))
    ;; BEGIN modification
    (setq list
      (mapcar
        (lambda (string)
          (let* (
              (current-date (time-to-days (current-time)))
              (ts-date (get-text-property 0 'ts-date string)) )
            (if ts-date
              (cond
                ((< ts-date current-date)
                  (message "The task dated %s is overdue." ts-date)
                  ;; The new value of `string' is returned/thrown as a result.
                  (replace-regexp-in-string "^" "OLD:  " string))
                ((= ts-date current-date)
                  (message "The task dated %s is due today." ts-date)
                  ;; The new value of `string' is returned/thrown as a result.
                  (replace-regexp-in-string "^" "CURRENT:  " string))
                ((> ts-date current-date)
                  (message "The task dated %s is not due yet." ts-date)
                  ;; The new value of `string' is returned/thrown as a result.
                  (replace-regexp-in-string "^" "FUTURE:  " string)))
              string)))
        list))
    ;; END modification
    (mapconcat 'identity list "\n")))
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.