【问题标题】:How can I mark Org habits as done in the past如何将组织习惯标记为过去完成
【发布时间】:2014-08-21 22:40:11
【问题描述】:

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

有没有办法将过去一天的习惯标记为已完成?所以不用 C-c C-t d (我将“d”设置为“DONE”),我可以得到一个提示,询问我一个日期。

【问题讨论】:

    标签: org-mode


    【解决方案1】:

    我也想这样做有一段时间了,你的问题启发了我终于弄清楚了。

    有一个名为“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-extend-today-直到更改为其他值无效,始终将日期设置为昨天。
    • @driftcrow 你是对的。最近的用法一定有所改变。我会看看更新功能。
    • org-todo-yesterday 非常适合我(OSX el capitan 上的 emacs 25.1.1)。谢谢!
    • 另一种可行的解决方案可以在emacs.stackexchange.com/a/9451/315找到
    • 用这个函数好像不能正确输入LOGBOOK中的“last repeat”和“DONE”条目。
    【解决方案2】:

    这行得通吗?这只是完成了这个习惯并为今天重新安排了时间

    (defun org-todo-yesterday2 (&optional arg)
      (interactive "P")
      (org-todo-yesterday arg)
      (org-schedule arg (format-time-string "%Y-%m-%d")
      )
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 2014-07-19
      • 2017-12-03
      • 2015-12-18
      相关资源
      最近更新 更多