在活动结束后的第二天,我经常将习惯标记为已完成。当我这样做时,习惯模块会自动更新元数据中的一堆日期,但日期总是在今天。那么,我必须手动编辑SCHEDULED,LOGBOOK和LAST_REPEAT状态。
有没有办法在过去的某一天将习惯标记为DONE?所以没有做C-c C-t d(我已经" d"设置为" DONE")我可以得到一个提示,要求我约会。
答案 0 :(得分:10)
我也想这样做一段时间,你的问题激励我最终弄明白。
有一个名为" org-todo-yesterday的功能。"默认情况下,它不会映射到任何键,但您可以随时使用M-x
org-todo-yesterday
来调用它(或者如果您经常使用它,请将其映射)。对我来说,它打破了,因为它呼吁"第三"这不是我安装中定义的功能。
对于一个更通用的函数,提示我们输入日期并将事情标记为当时已完成,我们可以将此函数(受org-todo-yesterday启发)添加到我们的emacs init文件中。它会像你在目标日期的23:59完成一样,这有望足够好。
(defun dk/org-todo-custom-date (&optional arg)
"Like org-todo-yesterday, but prompt the user for a date. The time
of change will be 23:59 on that day"
(interactive "P")
(let* ((hour (nth 2 (decode-time
(org-current-time))))
(daysback (- (date-to-day (current-time-string)) (org-time-string-to-absolute (org-read-date))))
(org-extend-today-until (+ 1 (* 24 (- daysback 1)) hour))
(org-use-effective-time t)) ; use the adjusted timestamp for logging
(if (eq major-mode 'org-agenda-mode)
(org-agenda-todo arg)
(org-todo arg))))
答案 1 :(得分:0)
这项工作有效吗?这就简单地养成了习惯,并将其重新安排到今天
(defun org-todo-yesterday2 (&optional arg)
(interactive "P")
(org-todo-yesterday arg)
(org-schedule arg (format-time-string "%Y-%m-%d")
)
)