【发布时间】:2014-08-21 22:40:11
【问题描述】:
我经常在活动完成后的第二天将习惯标记为完成。当我这样做时,习惯模块会自动更新元数据中的一堆日期,但日期总是今天。因此,我必须手动编辑 SCHEDULED、LOGBOOK 和 LAST_REPEAT 状态。
有没有办法将过去一天的习惯标记为已完成?所以不用 C-c C-t d (我将“d”设置为“DONE”),我可以得到一个提示,询问我一个日期。
【问题讨论】:
标签: org-mode
我经常在活动完成后的第二天将习惯标记为完成。当我这样做时,习惯模块会自动更新元数据中的一堆日期,但日期总是今天。因此,我必须手动编辑 SCHEDULED、LOGBOOK 和 LAST_REPEAT 状态。
有没有办法将过去一天的习惯标记为已完成?所以不用 C-c C-t d (我将“d”设置为“DONE”),我可以得到一个提示,询问我一个日期。
【问题讨论】:
标签: org-mode
我也想这样做有一段时间了,你的问题启发了我终于弄清楚了。
有一个名为“org-todo-yesterday”的函数。默认情况下,它不会映射到任何键,但您始终可以使用 M-x org-todo-yesterday 调用它(如果您经常使用它,也可以映射它)。对我来说,它会中断,因为它调用了“第三个”,这不是我安装中定义的函数。
对于提示我们日期并将事情标记为当时已完成的更通用的函数,我们可以将此函数(受 org-todo-yesterday 启发)添加到我们的 emacs 初始化文件中。它会表现得好像你在目标日期的 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))))
【讨论】:
org-todo-yesterday 非常适合我(OSX el capitan 上的 emacs 25.1.1)。谢谢!
这行得通吗?这只是完成了这个习惯并为今天重新安排了时间
(defun org-todo-yesterday2 (&optional arg)
(interactive "P")
(org-todo-yesterday arg)
(org-schedule arg (format-time-string "%Y-%m-%d")
)
)
【讨论】: