Tôi có một số mục trong bộ đệm org được đánh dấu là TODO và có dấu thời gian theo lịch trình:
* TODO do something
SCHEDULED: <2014-11-02 Sun>
Làm cách nào để khiến dấu thời gian SCHEDULED bị xóa khi tôi chuyển mục này sang trạng thái 'chờ'?
Tôi có một số mục trong bộ đệm org được đánh dấu là TODO và có dấu thời gian theo lịch trình:
* TODO do something
SCHEDULED: <2014-11-02 Sun>
Làm cách nào để khiến dấu thời gian SCHEDULED bị xóa khi tôi chuyển mục này sang trạng thái 'chờ'?
Câu trả lời:
Có thể một cái gì đó như thế này (được thử nghiệm ngắn gọn từ bộ đệm và chương trình nghị sự)
(defun rasmus/remove-schedule ()
"Remove SCHEDULED-cookie is switching state to WAITING."
(save-excursion
(and (equal (org-get-todo-state) "WAITING")
(org-get-scheduled-time (point))
(when (search-forward-regexp org-scheduled-time-regexp nil t)
(or (delete-region (match-beginning 0) (match-end 0)) t))
(get-buffer "*Org Agenda*")
(with-current-buffer "*Org Agenda*"
(org-agenda-redo)))))
(add-hook 'org-after-todo-state-change-hook
'rasmus/remove-schedule)
Nếu bạn đang làm điều này để WAITING
các mục không hiển thị trong bộ đệm chương trình nghị sự, tôi muốn đề xuất một giải pháp thay thế.
Bạn có thể định nghĩa WAITING
là một DONE
từ khóa -type. Chúng có thể dễ dàng được cấu hình để không hiển thị trong chương trình nghị sự, ngay cả khi chúng có lịch trình. Bạn có thể làm điều đó trên toàn cầu với điều này:
(setq org-todo-keywords '((sequence "TODO" "|" "WAITING" "DONE")))
Hoặc trên cơ sở mỗi tệp với tiêu đề này:
#+SEQ_TODO: TODO | WAITING DONE
Sau đó, để các mục này không hiển thị trong chương trình nghị sự, chỉ cần đảm bảo bạn đã đặt:
(setq org-agenda-skip-scheduled-if-done t)
Cuối cùng, nếu bạn thỉnh thoảng cần một WAITING
mục được hiển thị trong chương trình nghị sự, hãy đặt một mục DEADLINE
trên đó thay vì a SCHEDULE
. Việc hiển thị thời hạn được kiểm soát bởi một biến khác ( org-agenda-skip-deadline-if-done
), vì vậy chúng sẽ vẫn hiển thị trong chương trình nghị sự.