todo 描述语言
一个计划的模样
- desc: 放计划描述
nexttime: 0 # 下一次输出这个任务的时间,0 代表明天,1 就是后天,依次类推
period: 7 # 循环周期,每 7 天输出一次。如果想每天都输出,改为 1 即可
assign:
to: myself
via: web
style:
separator: ,
comment: 可以删除本行,作用是对任务性质的描述,类似注释
简写
t = times,次数 d = day m = month y = year
星期、月份按照英语中的缩写
计划之间的关系
添加标签
计划如果加字段 tag: tag_name,tag_name 是自定义的字符串,当计划被触发时,此 tag_name 即可被其他计划使用,通过 every、on、except、start_if、stop_if、del_if、delay_if、if 等
也可以指定多个
除了某一天 except
搭配匹配模式,符合则不输出。
可以和任何任务搭配,后面可以跟的内容和 if 相同。
延迟执行
添加键值对 delay_if: tagname 后,当要执行时却遇到了 tagname,会在下一次不满足 tagname 时立刻执行。并会提示被延期了。
周六的计划,如果周六要工作就推迟到明天
触发后,但是又满足延迟的条件,则增加一个字段 active: true ,只要下次不因 delay_if 延迟就会执行。
内置可用的条件
以 __ 开头,因此建议用户添加 tag 时不要以两个下划线开头,可能会因为和内置条件重复导致非预期行为
查看其他任务的状况,目前支持: - __tag_is_del ,任务要被删除会触发 - __tag_is_off ,只要任务是关闭的状态就会触发 - __tag_is_on ,只要任务是开启的状态就会触发 - __tag_is_delay ,只要任务处于被延迟的状态就会触发
使用时要把 tag 换成实际的 tag 名称
这样每次 tag 为 one_time 的计划被删后,都会有一句提醒的话
如果 tag 在多个计划中都有使用,则任意一个满足就会触发
计划的关启和删除
如果是执行几次后停止呢?
关闭和开启计划
手动添加 off: true 就是关闭,删除或者改为 off: false 就是开启
自动开启计划
如果计划本来就是开启状态,那么不会有任何变化。
当计划原本是关闭状态,如果满足条件,会把 off 改为 false,也就是开启计划,并在开启之后就判断计划在此次是否被触发
自动关闭计划
类似自动开启的
除了在 start_if 和 stop_if 后跟标志外,还可以跟日期。比如
9月3号后开启任务
1、5号开启任务,3、7号关闭任务
在任务开启的状态下,休眠 3 次,也就是原来前 3 次的输出被重置,推理期间的有些更改也要重置(但是延迟的 active 还是要变),第 4 次恢复,并删除 sleep 字段。
如果任务本身就已经关闭,那么无法被触发,因此休眠的次数不会减少。
删除计划
除了手动删除,还可以满足条件后自动删除
触发若干次数后,自动删除
触发条件后,自动删除,不过该次任务如果触发依然会输出
计划内容
desc 后面可以跟任意格式的内容,字符串、列表、字典都可以。
具体怎么使用取决于处理 desc 的模式和指派对象。默认情况下,不管什么内容,都按照字符串输出
使用变量
内置变量有这些: - 今年的年份 {{year}},今年第几周 {{week_of_year}},今天星期几 {{weekday_zh}} - 更多查看 Collection.py 中的 Today 类型 - 今日的任务,{{ todo_and_notice }},只有用在其他出口类型上才有意义
假设输出的那天是 2024.01.31 号,是第 5 周的星期三,则实际的输出为“今年年份用2024,今年第几周4,今天星期三”
可以使用 at 变量,查看当前任务的执行日期和时间,或者 at_time 只查看时间
队列模式
每次被触发,从上往下,会输出第一条内容,还会把这条内容删除。
如果 desc 是列表,那么默认就是队列模式。
适合每隔一段时间,就需要添加内容的情况。
比如,想要每天听英语,可以在周末把下一周要听的 YouTube 视频网址,一条条地放到队列的后面,这样在下一周,它会从上往下,依次输出,并把输出过的删除。
在任务为空时,不会自动删除,而是关停任务,并会保留最后一条内容,方便继续添加任务,
轮询模式
每次被触发,按顺序输出内容,如第一天输出第一条,第二天输出第二条。
达到最后一条,就重新从第一条开始。
index 指向这次要输出的内容(当然是取模后的结果),1 表示指向第一个任务,index 必须大于等于 1。
适合一系列不同的事情,依次放入今日任务。 - 比如 21 号收拾行李,22 号打扫,23 号叫房东检查,下午去火车站 - 又比如,每日空闲时间有限,学习任务串行执行,第一天看编程,第二天 Linux,第三天 电子电路,依次循环
样式
自定义分隔符
添加一个 separator 字段,后面跟单个字符或字符串,在输出的任务描述中,这个字符串会取代默认的逗号,放在这条任务与下条任务之间
输出为“任务内容k下条任务”
特殊的,\n 代表换行符。
计划预计耗时
比如计划每天看英文视频 30min,那么可以添加字段 time_taken,作用有两点:
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
指定执行时间精度到秒
增加一个 at 字段,后面跟 hh:mm:ss 这种格式,要严格都是两位的,24 小时制,如 06:30:00,14:01:00 ,可以省略后面的分钟和秒,缺省都是 0。
没有 at 字段代表在生成任务之后立刻执行。
每天的 8 点半吃药
at 后面也可以跟一些语义化的表达,比如破晓时刻 dawn 、日出时刻 sunrise 、日落时刻 sunset 、入夜时刻 dusk
还可以使用加法或减法,不过只能有两个操作数,且左边的必须是语义化的表达,右边的必须是一个时长,如下
睡觉的时间在天亮前 7.5 小时
非默认出口任务,执行时间一样的任务,按照在任务列表从上往下的顺序串行执行,执行时间不一样的任务之间是并发的关系。