如何在 taskwarrior 中管理重复任务?

如何在 taskwarrior 中管理重复任务?

我无法理解如何管理重复性任务任务战士

我从一个空数据库开始:

$ task
[task next]
No matches.

我添加了一个每日重复的任务:

$ task add recur:daily due:later test

报告中显示:

$ task
[task next]

ID Age Recur Due   Description Urg 
 2 -     P1D 19.2y test         2.4

1 task
Creating recurring task instance 'test'

如果我像这样标记它完成:

$ task 2 done
Completed task 2 'test'.
Completed 1 task.
$ task
[task next]
No matches.

它从报告中消失了。我认为这是有道理的,因为“我今天完成了每日任务”。

问题是第二天及以后它再也没有出现。我做错了什么?

答案1

我正在处理重复的任务并弄清楚了:

一些背景知识:创建重复任务会创建一个parent产生child任务的任务。
来自:https://taskwarrior.org/docs/recurrence.html

经过一些测试,我发现使用此命令:

    (ins)[>]task add "test" recur:5s due:30s
    Created task 27 (recurrence template).

首先,due影响第一个子任务。之后生成的每个子任务截止时间(我的例子里是 30 秒)然后到期重复时间(示例中为 5 秒)

    (ins)[>]task
    [task next]

    ID Age Deps P Project Recur Due  Description
    22 -                   PT5S 30s  test

    #some time later...

    (ins)[>]task
    [task next]

    ID Age Deps P Project Recur Due  Description
    22 60s                 PT5S -30s test
    23 30s                 PT5S -25s test
    24 25s                 PT5S -20s test
    25 20s                 PT5S -15s test
    26 15s                 PT5S -10s test
    27 10s                 PT5S -5s  test
    28  5s                 PT5S -    test
    29  0s                 PT5S 5s   test

然而due还影响另外一件事:当第二个子任务产生时(第二个孩子的任务是在重复时间因此第三个子任务在重复时间等等)。

这就是为什么您看不到第二个子任务的原因,因为根据您的示例,您将截止日期设置为later未来19.2 years的时间;因此,第二个子任务将仅在19.2 years一段时间后生成(此后每个子任务都会生成daily)。

答案2

之前回答过同样的问题在 unix 和 linux 上。再次发布答案,以供记录。


在我深入讨论工作细节之前,请注意,重复并不是精心设计。我带来的是经验观察,可能会随着修改而改变。

TLDR;如何使用和理解重复

task add recur:<duration> due:<first task due date> until:<delete first task by date> wait:<date when task will appear> "my task"

例子:

  • task add recur:daily due:9:00 until:12:00 wait:5:00 eat breakfast
  • 上午 9:00 吃早餐
  • 隐藏任务直至凌晨 5:00
  • 午餐时间前删除任务
  • 每天创造一个新的事件

细节

重复需要一个due属性(通过验证检查)。如果存在untilwait属性,则重复也可以使用它们。重复不使用scheduled。并且有一个mask属性,用于跟踪任务是重复发生的哪个实例。

当创建新的循环实例时:

  • new task due= parent due+ recur*mask
  • until两者的数学运算相同wait
  • scheduled是从父任务中完全复制而来。实际上,这种意外行为不会破坏您的工作流程,只会影响过滤器并扭曲紧迫性。我之所以指出这一点,是因为我花了很长时间才发现它没有按预期工作。

每次taskwarrior运行时,它都会检查是否该创建下一个事件了。伪方程为:

now >= due + recur * (mask + 1)`

请注意,有一个配置值,rc.recurrence.limit可以用来告诉 taskwarrior 在更远的地方创建更多的事件。

您可以预期下一个事件将在前一个事件的到期日被创建。

相关内容