todo 描述语言
一个计划的模样
- desc: 放计划描述
nexttime: 0 # 下一次输出这个任务的时间,0 代表明天,1 就是后天,依次类推
period: 7 # 循环周期,每 7 天输出一次。如果想每天都输出,改为 1 即可
assign:
to: myself
via: web
style:
separator: ,
comment: 可以删除本行,作用是对任务性质的描述,类似注释
简写
d = day m = month y = year
星期、月份按照英语中的缩写
计划之间的关系
添加标签
计划如果加字段 tag: tag_name(tag_name 是自定义的字符串),当计划被触发时,此 tag_name 即可被其他计划使用,通过 except、start_if、stop_if、del_if、delay_if、if 等
也可以指定多个
除了某一天 except
搭配匹配模式,符合则不输出。
可以和任何任务搭配,后面可以跟的内容和 if 相同。
延迟执行
添加键值对 delay_if: tagname 后,当要执行时却遇到了 tagname,会在下一次不满足 tagname 时立刻执行。并会提示被延期了。
周六的计划,如果周六要工作就推迟到明天
内置可用的条件
以 __ 开头,因此建议用户添加 tag 时不要以两个下划线开头,可能会因为和内置条件重复导致非预期行为
查看其他任务的状况,目前支持: - __tag_is_del ,任务要被删除会触发 - __tag_is_off ,只要任务是关闭的状态就会触发 - __tag_is_on ,只要任务是开启的状态就会触发 - __tag_is_delay ,只要任务处于被延迟的状态就会触发
使用时要把 tag 换成实际的值,如下:
这样每次 tag 为 one_time 的计划被删后,都会有一句提醒的话。如果有多个计划都有 one_time 这个 tag,则任意一个被删除就会触发提醒。
计划的关启和删除
关闭和开启计划
手动添加 off: true 就是关闭,没有 off 或者改为 off: false 就是开启
自动开启计划
如果满足条件,会把 off 改为 false,也就是开启计划,并在这次就判断计划是否被触发,而不是等下一次推理时再判断。
自动关闭计划
在 start_if 和 stop_if 后除了可以跟 tag ,还可以跟日期。比如
9月3号后开启任务
1、5号开启任务,3、7号关闭任务
计划休眠若干次
当任务被触发时,休眠 3 次,也就是前 3 次虽然被触发,但是不会做任何事情,第 4 次恢复。若计划本身就已经关闭,那么无法被触发,也就不会休眠,这是和关闭计划的不同之处。
删除计划
除了手动删除,还可以满足一定条件后自动删除。
触发若干次数后,自动删除
触发条件后,自动删除,不过计划若在这次被触发依然会输出
计划内容
desc 放任务的描述。
使用变量
内置变量有这些: - 今年的年份 {{year}},今年第几周 {{week_of_year}},今天星期几 {{weekday_zh}} - 今日的任务,{{ todo_and_notice }},一般用在一个邮件计划中,每天发邮件给自己 - 更多变量请到这里查看: https://plantodo.app/zh/context/
假设输出的那天是 2024.01.31 号,是第 5 周的星期三,则实际的输出为“今年年份用2024,今年第几周4,今天星期三”
可以使用 at 变量,查看当前任务的执行日期和时间,或者 at_time 只查看时间
队列模式
如果 desc 是列表,默认是队列模式。每次计划被触发后,会从上往下,输出第一条内容,并删除这条。
适合每隔一段时间,就需要添加内容的情况。
比如,想要每天听英语,可以在周末把下一周要听的 YouTube 视频网址,一条条地放入,这样每一天都会输出不同的网址。
轮询模式
有 index 字段则为轮询模式。
每次被触发,按顺序输出内容,如第一天输出第一条,第二天输出第二条。达到最后一条,就重新从第一条开始。
index 后跟一个正整数,代表这次要输出某一条,1 表示指向第一条。
适合一系列不同的任务依次循环,如:第一天看编程,第二天 Linux,第三天电子电路。
样式
自定义分隔符
添加一个 separator 字段,后面跟单个字符或字符串,在输出的任务描述中,这个字符串会取代默认的逗号,放在这条任务与下条任务之间
输出为“任务内容k下条任务”
特殊的,\n 代表换行符。
计划预计耗时
如计划每天看英文视频 30min,那么可以添加 time_taken: 30min,作用有两点:
1. 在今天任务汇总中,对应任务后会带上这个时长
2. 在 APP 上,下一个任务的开始时间会根据这个任务耗时进行计算,方便查看一天的时间安排,如果当天任务预计耗时超过上限,方便一眼看出来,并进行调整。
输入的时长不能超过 24 小时,格式可以为: - 32m - 1.2m - 1.2min - 1.2mins - 1.2minute - 1.2minutes - 2hours - 2hr - 2h - 2hrs - 2hour - 2h32m - 5hr34m56s - 5 hours, 34 minutes, 56 seconds - 5 hrs, 34 mins, 56 secs
- 4:13
- 4:13:02
- 4:13:02.266
该项目前只对 to myself 的计划有实际效果,对 to machine 的计划无用,原因是 to machine 无论是触发 webhook 还是发邮件等,增加花费时间没有实际意义。
指定具体执行时间
指定执行时间需要增加一个 at 字段,后面跟 hh:mm:ss 这种格式(严格两位),24 小时制,如 06:30:00,14:01:00 。
每天的 8 点半吃药
at 后面也可以跟一些表示时刻的词汇,比如破晓时刻 dawn 、日出时刻 sunrise 、日落时刻 sunset 、入夜时刻 dusk。
还可以使用加法或减法,不过只能有两个操作数,且左边的必须是词汇,右边的必须是一个时长,如“睡觉的时间在天亮前 7.5 小时”:
没有指定具体执行时间的话,则任务的执行时间是在程序生成任务汇总的那一刻,也可以手动指定:at: once。
以及,可以通过 at 指定计划的执行时刻应该在另一个计划之后,通过 after_tag 指定,tag 需要替换成具体的名称。
在 tag 对应的计划之后
如果 tag 没有对应的计划,则效果和不使用 at 等同;如果 tag 对应了多个计划(被触发的),对于 after 会放到最后一个后面。
目前,使用了
after_tag的计划,必须放在最后才能生效,这点将来会进行改进。