28个版本 (4个重大更新)
| 0.5.0 | 2023年5月21日 | 
|---|---|
| 0.3.10 | 2023年4月14日 | 
| 0.3.1 | 2023年3月30日 | 
| 0.1.0 | 2022年12月31日 | 
#581 in 文本处理
在 timeblok-cli 中使用
87KB
 2.5K  SLoC
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 只是一行文本,如果它发生在 Event 之后,它被认为是该事件的备注,这将与 ics 条目的 DESCRIPTION 字段相对应。
Range 简单地是一对 occasion,由一个 ~ 分隔,表示一个时间范围。
Command 是一行以 / 开头,后跟一个命令名称和参数,允许进行额外的扩展。
过滤器
Filters 是一种特殊的语句,可以用来过滤指定范围内的日期、事件、数字。Filters 可以嵌套和组合,以表示复杂的逻辑和重复的事件。在语法上,它们被大括号 {} 包围。
在解析过程中,Filters 绑定到最后指定的 Occasion,遍历所有适合 occasion 的可能值,并选择那些符合 filter 条件的值。
例如,考虑以下 filter
-2-
{--1~--10 and workday}
这个 filter 绑定到 occasion -2-,其中 occasion 的年份可以从先前的 occasion 继承(默认为文件的创建日期),日期未指定。因此,filter 将遍历所有可能的日期。由于两个子 filter 通过一个 and 子句连接,filter 将只选择那些同时在 --1~--10 范围内并且是工作日的日期。
以下 filter 目前受支持
- 基本逻辑 filter:and,or,not
- 范围 filter:过滤指定范围内的所有日期,例如 --1~--10过滤出推断出的年份和月份中日期值为 1 到 10 的所有日期。
- 星期过滤器: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
依赖项
~15–31MB
~487K SLoC