1 个不稳定版本
0.0.1 | 2021年10月7日 |
---|
#93 in #定时任务
100KB
1K SLoC
ELMO - Rust 持久通知
一个小巧的工具,用于提醒你需要做的事情。
一个最小化的提醒服务实现,不限于单个计算机会话。对于那些生活在终端的用户来说,像这样简单的东西
sleep 40m && notify-send -t 3000 "Apple pie" "Fetch the apple pie from the oven" &
工作得相当不错,但在我看来有两个问题
- 如果你想在特定日期设置提醒,你必须计算从现在到目标时间的分钟数。
- 如果我要重启或者如果目标日期是几天后,我定期关闭我的电脑,这就不起作用了。
我们通过在本地 SQLite 数据库中维护事件,并以良好的旧 cronjob 定期检查该数据库的条目来解决此问题。
安装
cargo install elmo
数据库位置
默认情况下,新数据库文件将创建在: ~/.elmo/events.db
。如果你希望使用其他位置,请使用 ELMO_DATABASE_URL
环境变量指定该位置。无论如何,表将自动创建。
用法
此工具包含 4 个命令
-
set - 在 4 种风味之一中创建新的通知
- 立即通知,这是默认选项,当未使用
--date
、--cron
或--wait
时使用。你可以像使用其他工具(如notify-send
或dunstify
)一样使用此选项。 - 安排通知,当你使用
--date
选项指定日期(格式:2021-09-10T18:00)或使用--wait
选项指定等待时间(例如 5 分钟 或 7 小时)时,事件将被存储在本地数据库中,以后可以搜索和发出通知。 - 使用
--cron
选项安排重复事件,这类似于在crontab中手动设置cronjob,例如:* */5 * * * elmo set "提醒我" "每隔5小时"
,但有一些优点。您可以列出所有重复事件:elmo list --cron
,如果您在事件发生几分钟后再打开计算机,通知会延迟发送,所有重复事件都由一个cronjob处理(您的crontab更简洁)
- 立即通知,这是默认选项,当未使用
-
检查 - 查找即将发生的所有事件。对于常规事件,这也会处理过去的事件,所有已通知的常规事件都会从数据库中删除。此外,该功能还会检查在时间段内(现在 - 30分钟 -> 现在)与重复事件的匹配日期,当事件被触发时,数据库中最后通知的日期会更新。
-
列出 - 显示即将发生的事件及其所有相关属性(名称、描述、通知日期、图标名称、声音文件路径)。有两种模式:未设置
--cron
的常规事件和设置--cron
的重复事件。使用--exp
可以筛选出在时间段内(现在 -> 现在 + 持续时间表达式)通知的事件,例如:表达式示例:5 min
、30 minutes
、20 seconds
、3 hours
、15 days
等。 -
删除 - 删除数据库中现有事件,使用列出命令可找到ID。此命令也有两种模式:常规事件和重复事件(
--cron
)。默认情况下,用户将需要确认,但可以使用-y
参数跳过确认。
示例
立即触发的简单通知
elmo set "Hey" "It's me, your computer"
特定时间触发,具有持续时间表达式和图标的通知
(此事件将存储到数据库中,必须使用检查命令来触发)
elmo set "Pizza" "Get the pizza out of the oven" --wait "20 min" --icon pizza_icon
特定日期时间的提醒,带有声音、公告和声音测试
(此事件将存储到数据库中,必须使用检查命令来触发)
elmo set "Meeting" "Work meeting per jitsi"\
--date "2022-10-01T11:00"\
--sound ~/Music/gong.mp3\
--announce\
--test_sound
每3天下午6点提醒浇水植物
(此事件将存储到数据库中,必须使用检查命令来触发)
elmo set "Plants" "Water the plants" --cron "0 0 18 */3 * *" --icon plants_icon
Cronjob配置
在创建新事件后,我们需要一种机制来检查何时应发出通知。Unix系统包含一个众所周知的工具,称为cronjob,该工具使用户能够定义某些重复事件。
使用crontab -e
打开您的crontab,并在末尾添加一行以定期运行elmo --check
。例如(每10分钟一次)
*/10 * * * * elmo --check
接下来,我们需要确保cronjob的过程可以与图形子系统(X11)通信。在您的crontab顶部添加以下行
XDG_RUNTIME_DIR="/run/user/1000"
最后,如果您想使用自定义数据库位置,还必须向crontab提供ELMO_DATABASE_URL
环境变量
ELMO_DATABASE_URL=/path/to/my/events.db
Windows系统
Windows生态系统实际上并没有提供cronjob的等效功能,它提供的是Windows任务计划程序,但无法每10分钟运行一次。有一些替代方案,如Task Till Dawn,但由于此软件不是开源的,我无法毫无保留地推荐它。
如果您发现一个好的方法,请随时为此README文件发起一个pull request。
为什么是Elmo?
嗯,我的狗的名字叫Elmo,他时不时地在吸引注意力方面表现得非常好。 ;)
依赖项
~39–75MB
~1.5M SLoC