1 个不稳定版本
0.2.0 | 2021年1月6日 |
---|
#428 在 日期和时间
62KB
1.5K SLoC
reti - Rust中的时间记录
reti
允许您通过在一天中的时间段进行跟踪来通过 CLI 记录时间。所有数据都存储在 json 文件(store)中。
背景
一段时间前,我开始感到有必要跟踪我工作的小时数。我开始在文本文件中跟踪时间,并编写了一个简单的 Python 脚本来解析、计数和汇总条目。条目基于行,这意味着每一行恰好包含一天的所有时间段、因子和注释。
# date parts with factor comment
# yyyy-mm-dd separated by ' '
# (value of last '-'
# i.e. '...-1', 1 if
# not present)
2016-04-02 08:00-12:00-1 13:00-17:00 19:00-21:00-1.5 # long day
# the line above consits of 3 parts, where the last part (19-21) has a factor of
# 1.5 of the base fee
日期也可以仅指定为 mm-dd
,此时假定当前年份。
除了这有点笨拙之外,我还想继续使用 Rust,这让我有了实现某种东西并存储数据的另一种格式的想法。
然而,由于上面指定的格式在 your-favorite-editor 中很容易理解和编辑,reti
继续在编辑条目时使用此格式。
安装
通过 Cargo
从 crates.io 安装 reti
。
> cargo install reti
从源代码构建
克隆仓库
> git clone https://github.com/awidegreen/reti.git
> cd reti
通过 cargo
构建 和安装。注意您需要相当新的 Rust 版本。
> cargo install --path .
二进制发行版
从 Github 发布页面 获取最新发行版。
功能
如前所述,reti
在单个文件上工作,可以使用 -f
指定。
# use the 'year2016.json' for all reti subcommands
$ reti -f year2016.json show
记录
每一天由时间段组成(部分),例如午餐前后的工作时间,其中午餐被视为休息时间。如果时间段需要按加班计算,则可以为时间段分配一个因子。此因子基于通过 reti set fee <val>
设置的文件特定基本费率。
# show help for adding
$ reti add help
# help for adding parts
$ reti add part -h
# record a period (part) for the current day (from 08 to 12).
$ reti add part 08:00 12:00
# add via parse will parse the provided data as legacy format
$ reti add parse 04-02 08:00-12:00
显示
可以通过 show
子命令显示记录的数据(每个 store)。这包括以不同详细程度显示一天、一周、一个月和一年的数据(请参阅 reti show help
)。
输入 reti show help
以获取详细说明和一些示例
# show a summary of the current mont
$ reti show month
# get a verbose (-v) summary of year 2016 in the 'bla.json' file.
# all days (-d) and all their parts (-p) will be shown
$ reti -f bla.json show -p -v -d year 2016
导入
仍然可以使用“传统”格式导入文件...手动编辑文本文件比编写JSON更容易。
编辑
可以使用 edit
子命令更改现有条目。所有请求的条目将按 传统 格式(每行)在临时文件中查询和显示。一旦保存并退出 $EDITOR,条目将被解析并覆盖。如果某行应被忽略,则可以保持其不变,注释掉(# ...
)或从文件中删除该行。
# edit the current day in $EDITOR from file foo.json
$ reti -f foo.json edit
get
和 set
文件属性
为了允许 reti 进行费用计算,可以设置基本费用
# set fee configured for file bla.json
$ reti -f bla.json set fee 50
费用不受任何货币的限制 - 保持简单。一天中的每一部分都可以是基本费用的一个因子,其中默认因子为 1
。
# get the current fee for bla.json
$ reti -f bla.json get fee
入门
创建一个新的商店文件。
# init file 2016.json (empty)
$ reti init 2016.json
# alternative init a file with a legacy (e.g. under examples/test_leg_format.txt)
$ reti init 2016..json examples/test_leg_format.txt
# show the whole year
$ reti -f 2016.json show -p -d year 2016
# set some arbitrary fee per hour
$ reti -f 2016.json set fee 250
# show year should show some proper calculation now
$ reti -f 2016.json show -p -d year 2016
# edit a specific date, e.g. change end time and comment to 3h
$ reti -f 2016.json edit 2016-08-27
# check if everything was updates
$ reti -f 2016.json show -p -d year 2016
# edit mulitple days, only September
$ reti -f 2016.json edit 2016-09-01 2016-09-02
配置文件
reti
支持配置文件,可以在 $XDG_CONFIG_DIR/reti/reti.toml
(例如 $HOME/.config/reti/reti.conf
)中预先定义某些属性,这些属性在 reti
启动时使用。
storage-file
:默认 JSON 存储文件的路径(字符串)save-pretty
:指定 JSON 文件是否应可读(布尔值)
可以使用命令行参数覆盖这些属性,请参阅帮助。
示例配置文件:$HOME/.config/reti/reti.toml
storage-file = "/home/awidegreen/reti_2018.json"
免责声明
自行承担风险使用
许可证
版权(C)2018 由 Armin Widegreen
这是免费软件,根据 The BSD-3-Clause 许可。
依赖项
~6–15MB
~194K SLoC