Cách xóa dấu thời gian 'SCHEDULED' khi thay đổi trạng thái TODO thành WAITING


7

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 sao bạn muốn nó được gỡ bỏ? Có phải cho mục đích không hiển thị trong chương trình nghị sự?
Malabarba

Tôi muốn xóa nó đi vì theo mặc định tôi không lên lịch các mục WAITING. Nhưng tôi vẫn muốn nó vẫn hiển thị trong Chương trình nghị sự nếu được LỚP bởi vì đôi khi tôi có lịch trình cho họ (ví dụ: để đăng ký sau X ngày KHAI THÁC).
mankoff

Vâng, đó là vì mục đích không hiển thị trong chương trình nghị sự - Nói chung đó là một số nhiệm vụ tôi đã thực hiện và hiện đang chờ phản hồi cho email. Vì vậy, việc chuyển đổi nó thành 'WAITING' chỉ ra rằng tôi không thể làm việc với nó ngay bây giờ và muốn dấu thời gian theo lịch trình rời khỏi (Tất nhiên, nếu sau này tôi thêm dấu thời gian theo lịch trình vào đó, tôi muốn nó hiển thị lại).
Nathaniel Flath

Câu trả lời:


3

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)

1

Nếu bạn đang làm điều này để WAITINGcá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 WAITINGlà một DONEtừ 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 WAITINGmục được hiển thị trong chương trình nghị sự, hãy đặt một mục DEADLINEtrê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ự.


1
Nếu bạn sử dụng ghi nhật ký xong, điều này sẽ tạo ra một nhật ký hoàn thành để chờ đợi, điều này có thể hơi khó hiểu.
ceving
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.