17个版本
0.5.0 | 2023年5月21日 |
---|---|
0.4.5 | 2023年5月4日 |
0.3.10 | 2023年4月14日 |
0.3.1 | 2023年3月30日 |
在 编程语言 分类中排名 325
每月下载量 105 次
38KB
779 代码行
TimeBlok
cargo install timeblok-cli # install timeblok
timeblok -no # create&write a new blok file, and open it in your calendar app!
什么是TimeBlok?
TimeBlok是一种简单、声明性的DSL,它结合了纯文本的灵活性和可扩展性,以及数字日历的便利性,用于个人日历计划。
受到Cal Newport的文本文件时间阻塞的启发,TimeBlok提供了一种极简的语法,用于在纯文本文件中组织您的日程,同时还支持编译成.ics文件,以便在任意日历应用程序中使用。
加入我们的Discord服务器!
示例
每日计划
这是最简单的用例
2023-1-1
7:30am wake up & eat beakfast
8am~11:30 work on TimeBlok
- Write Technical Documentation
2pm~6pm Study for exams
8pm~10pm Reading
- Finish an entire book
编译成.ics文件后,可以导入到您的日历中。
月度计划
/region CN // Sets the region to China
2023-1- // Locks in the following events to 2023-1
{--1~--10 and CNworkday} // workdays from jan 1 to jan 10 in China
7:30am wake up to a new day
10am ~ 11am work on EvilCorp
{sun}
4pm weekly review //weekly review every sunday
--11
8am~10am Resign from EvilCorp
- Make sure you still have access to the servers
-2- // This overrides the month information from line 1.
--1
3pm~4pm Initiate operation "Hack the planet"
解析后,可以导入到您的日历中:
安装
目前需要安装Rust。
从Cargo安装
$ cargo install timeblok-cli
用法
导出到文件
$ timeblok input.txt -f output.ics
导出到并打开在默认日历应用程序中
$ timeblok input.txt -o
创建一个新的计划文件并在您的日历应用程序中打开它
$ timeblok --new -o
$ timeblok -no # shorthand
帮助
$ timeblok --help
集成
- VSCode(语法高亮) 市场
规范
TimeBlock语言支持以下语句
- 事件
- 场合
- 备注
- 过滤器
- 命令
Occasion
表示任何单行描述时间点的内容,通常是按照 YYYY-MM-DD
格式的日期。它可以是一个日期、一个时间,或是一个日期和时间。Occasion 将会继承最近的先前的未指定字段。第一个插入作用域的 occasion 将是目标文件的创建日期。例如,如果之前的 occasion 是 2024-3-
,那么 --3
将被解释为 2024-3-3
。
Event
是以 Occasion
或 Range
开头的一行文本,后面跟着表示事件名称的文本。
Note
只是一行文本,如果它出现在事件之后,它被视为该事件的备注,这将与 ics 条目的 DESCRIPTION
字段相对应。
Range
简单地是一对 occasion,由一个 ~
分隔,表示一个时间范围。
Command
是一行文本,以一个 /
开头,后面跟着命令名称和参数,允许额外的扩展性。
过滤器
Filters
是一种特殊类型的语句,可以用来过滤指定范围内的日期、事件、数字。Filters 可以嵌套和组合,以表示复杂的逻辑和重复的事件。语法上,它们被大括号 {}
包围。
在解析过程中,filters 绑定到最后指定的 Occasion
,遍历所有适合 occasion 的可能值,并选择那些符合 filter 条件的值。
例如,考虑以下 filter
-2-
{--1~--10 and workday}
此 filter 绑定到 occasion -2-
,其中 occasion 的年份可以继承自先前的 occasion(默认为文件的创建日期),日期未指定。因此,filter 将遍历所有可能的 2 月份的日期。由于两个子 filter 通过一个 and
子句连接,filter 将只选择那些同时位于 --1~--10
范围内并且是工作日的日期。
以下 filter 目前支持
- 基本逻辑 filter:
and
、or
、not
- 范围 filter:过滤指定范围内的所有日期,例如
--1~--10
过滤出推断年份和月份中天值为 1 到 10 的所有日期 - 星期 filter:
workday
、weekend
、sunday
、monday
、tuesday
、wednesday
、thursday
、friday
、saturday
(也支持简写mon
~sun
) - “灵活日期过滤器”:基本上是范围过滤器的简写,例如:
--{1~10}
等同于--1~--10
命令(实验性)
格式:/command_name [arg1] [arg2] ...
目前,命令是可以在程序的作用域或命名空间中做出更改的语句,或者执行任意操作。在未来,命令还将支持创建 OCCASIONS
和 EVENTS
,以及插件系统。
目前可用的命令包括
/region [region_name]
:根据惊人的 workalendar 项目设置区域,用于解决工作日。有关所有支持区域的名称参考这里。注意:目前仅支持ISO 3166-1 和 ISO 3166-2 代码(例如 CN,US),但我们将未来支持更灵活的区域名称。/set [key] [value]
:在命名空间中设置一个名称的值。这对于创建自定义过滤器非常有用。例如:/set semester {-2-17~-6-30}
/print [key]
:打印命名空间中名称的值。/tz [timezone]
/timezone [timezone]
:设置输出 ics 文件的时区。例如:/tz utc
/t [todo]
:创建待办事件。例如:/t buy milk
依赖
~0–17MB
~204K SLoC