#notes #entries #file-format #hmm #querying #note #entry

bin+lib hmmcli

一个小巧的命令行记事本应用

10 个版本 (5 个破坏性更新)

0.6.0 2023 年 6 月 4 日
0.5.2 2021 年 4 月 3 日
0.5.0 2020 年 3 月 22 日
0.4.1 2020 年 3 月 22 日
0.1.3 2020 年 3 月 15 日

#1275命令行工具

每月 41 次下载

MIT 许可证

68KB
1.5K SLoC

Build status Crates.io

hmm 是一个用 Rust 编写的简单命令行记事本应用。条目以纯文本形式编写,并按编写时间进行索引。

hmmjrnl 启发,但考虑到不同的用例。在 jrnl 在记事本用例中表现出色,允许用户以任意时间添加条目,并且文件格式是可读的,而 hmm 只允许您在当前时间添加条目,并具有针对基于时间的快速查询优化的机器可读格式。

jrnl 的比较

jrnl 有而 hmm 没有的功能

  • 加密。
  • 在任意时间添加条目的能力。
  • 内置标签概念。
  • 内置星级概念。
  • 编辑条目的能力。
  • 解析英语日期/时间的功能,例如 "yesterday" 和 "2 weeks ago"。

hmm 有而 jrnl 没有的功能

  • 明确的日期格式 (RFC3339)。
  • 针对按时间搜索优化的文件格式。
  • 格式化条目的能力。
  • 没有外部依赖。
  • 很多灵活性。

如果您需要在过去的时间添加条目,或者您需要加密,或者您需要纯文本格式的文件,或者您需要在写入后编辑条目,hmm并不适合您。除此之外,我相信hmm可以按照您期望的方式完美运行。

安装

目前不支持Homebrew,因此Mac用户需要通过cargo的方式,但我计划很快将其添加到Homebrew仓库中。

Arch Linux (AUR)

hmm位于AUR中,可以使用如yay之类的AUR助手进行安装。

yay -S hmm-bin

使用 cargo

安装Rust,然后运行

cargo install hmmcli

现在hmmhmmq二进制文件应该在您的终端中可用。

从源码安装

安装Rust安装git然后运行

git clone https://github.com/samwho/hmm
cd hmm
cargo install

使用

hmm分为三个二进制文件:hmmhmmqhmmp

  • hmm用于通过CLI编写新的条目。
  • hmmq用于根据时间和内容查询条目。
  • hmmp用于打印条目,如果您想使用除hmmq之外的工具查询它们。

hmm

从 CLI 添加条目

hmm hello world

这将将在默认的.hmm文件位置写入条目,该位置在您的家目录中。

将条目写入不同的.hmm文件

您的.hmm文件可以放在您想要的位置,并命名为您想要的名称。

hmm --path ~/.notes hello world

EDITOR中编写长条目

hmm

在没有参数调用或仅提供--path参数的情况下,hmm将打开您的默认EDITOR来编写条目。保存并退出该编辑器后,将笔记写入您的.hmm文件。如果您没有配置EDITOR,您也可以将其作为标志传递

hmm --editor vim

编辑器变量可以是任意复杂的,需要注意的唯一一点是,hmm将以临时文件作为最后一个参数调用它。在您的编辑器命令成功退出后,它将读取该临时文件的内容。如果您的编辑器没有成功退出,则不会向您的.hmm文件写入任何内容。

hmmq

列出您的条目

hmmq

默认情况下,这将按升序顺序列出所有条目。这可能不是您想要的,因此有一些标志可以缩小显示范围。

显示最近的 10 个条目

hmmq --last 10

显示前 10 个条目

hmmq --first 10

显示特定日期的条目

hmmq --start 2020-01-01 --end 2020-01-02

--start标志是包含的,而--end标志是排除的,因此上述命令将显示所有在2020年1月1日创建的条目。

日期遵循RFC3339/ISO8601格式,允许您省略不需要的部分。所有日期都在您本地时区中。

显示特定年份的条目

hmmq --start 2019 --end 2020

这将显示您在2019年的所有条目。

在特定年份中计数条目

hmmq --start 2019 --end 2020 --count

这将显示您在2019年创建了多少条目。

显示给定日期的所有条目

hmmq --start 2020-02-20

这将打印从2020年2月20日以来的所有条目。

显示随机条目

hmmq --random

打印一个随机条目。随机性来自在.hmm文件中随机选择一个字节,因此较长的条目更有可能被选中。这是一个权衡。以真正随机的方式选择条目需要读取整个文件,这与hmmq的哲学相悖。

格式化条目

hmmq 使用 Handlebars 模板格式来确定如何将条目打印到终端。以下是一个非常简单的模板示例

hmmq --format "{{ datetime }}: {{ message }}"

看起来并不复杂,但它展示了模板的外观以及您在模板中可以访问的所有变量。

hmmq 提供了一些辅助函数,可以让您的模板看起来更美观。以下是明确指定的默认输出格式

hmmq --format $'{{ color "blue" (strftime "%Y-%m-%d %H:%M" datetime) }}\n{{ indent (markdown message) }}╰─────────────────"

细心的读者会注意到格式参数前面的 $。这是 bash 的一个特性。如果没有它,格式参数内部的 \n 将会被字面打印出来,而不是被解释为换行符。

hmmp

如果您想使用其他工具来过滤您的 .hmm 文件,那是完全可以的,甚至被鼓励。存在 hmmp 工具,让您可以将过滤后的 .hmm 文件内容通过管道传递,并按照您想要的格式进行格式化。

以下两个命令是等价的

tail -n 10 ~/.hmm | hmmp
hmmq --last 10

以下两个也是等价的

tail -n 10 ~/.hmm | hmmp --format "{{ message }}"
hmmq --last 10 --format "{{ message }}"

基准测试

如果对下面表格背后的方法感兴趣,仓库根目录中有一个名为 bench.sh 的脚本。

命令 平均值 [ms] 最小值 [ms] 最大值 [ms] 相对
目标/发布/hmmq--路径/临时/输出--随机 13.5 ± 0.8 11.9 15.4 1.00
目标/发布/hmmq--路径/临时/输出--最后10 15.0 ± 0.8 12.8 17.1 1.11 ± 0.09
目标/发布/hmmq--路径/临时/输出--首次10 13.6 ± 1.0 9.0 16.2 1.01 ± 0.09
目标/发布/hmmq--路径/临时/输出--开始2019 --首次10 16.8 ± 0.8 15.3 19.2 1.24 ± 0.09
目标/发布/hmmq--路径/临时/输出--结束2019 --最后10 18.8 ± 0.9 16.4 21.4 1.40 ± 0.10
目标/发布/hmmq--路径/临时/输出--开始2019-01 --结束2019-02 325.6 ± 11.9 309.9 379.9 24.11 ± 1.65
目标/发布/hmmq--路径/临时/输出--开始2019 --结束2020 --计数 346.6 ± 13.6 336.7 427.6 25.67 ± 1.79
目标/发布/hmmq--路径/临时/输出--开始2019-01 --结束2019-06 --包含 lorum 232.3 ± 5.2 226.4 262.7 17.21 ± 1.07
目标/发布/hmmq--路径/临时/输出--开始2019 --结束2020 --正则表达式"(lorum|ipsum)" 565.3 ± 13.3 548.1 622.1 41.87 ± 2.62

依赖项

~19–35MB
~498K SLoC