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