我怎样才能像过去那样标记Org的习惯

时间:2014-08-21 22:40:12

标签: org-mode

在活动结束后的第二天,我经常将习惯标记为已完成。当我这样做时,习惯模块会自动更新元数据中的一堆日期,但日期总是在今天。那么,我必须手动编辑SCHEDULED,LOGBOOK和LAST_REPEAT状态。

有没有办法在过去的某一天将习惯标记为DONE?所以没有做C-c C-t d(我已经" d"设置为" DONE")我可以得到一个提示,要求我约会。

2 个答案:

答案 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")
  )
)