Tôi đã muốn chính xác hành vi "Tôi đã làm điều này ngày hôm qua" trong một thời gian và không bao giờ có ý định thực hiện nó. Nhưng bây giờ nếu tôi có thể nhận được điểm cho nó ....
Hành vi này dường như được mã hóa cứng vào org-todo
. Dòng trong org.el
đó đặt dấu thời gian ĐÓNG là (org-add-planning-info 'closed (org-current-effective-time))
và ghi chú LOGBOOK được thêm vào org-add-log-setup
, theo đó lần lượt gọi org-effective-current-time
. org-effective-current-time
làm những gì nó nghe như và trả lại thời gian hiệu quả.
Giải pháp rõ ràng là tạm thời thay đổi org-effective-current-time
thành thứ gì đó nhắc nhở một ngày. Nhưng sau đó chúng tôi được nhắc hẹn nhiều lần với mỗi cuộc gọi, điều này thật khó chịu. Tôi không biết một cách tốt để tránh nó, nhưng bạn chỉ có thể lưu giá trị đầu vào của người dùng và giữ nó cho đến khi kết thúc chức năng.
Mã này dường như hoạt động và chỉ nhắc một lần khi thay đổi trạng thái sẽ được ghi lại.
(defun org-todo-with-date (&optional arg)
(interactive "P")
(cl-letf* ((org-read-date-prefer-future nil)
(my-current-time (org-read-date t t nil "when:" nil nil nil))
((symbol-function #'org-current-effective-time)
#'(lambda () my-current-time)))
(org-todo arg)
))