#break #gtk #reminder #config-file

bin+lib break-time

一个在电脑上使用时强制你定期休息的应用程序

3 个版本

0.1.2 2020 年 9 月 1 日
0.1.1 2020 年 7 月 19 日
0.1.0 2020 年 7 月 19 日

#501 in GUI

MIT 许可证

195KB
2K SLoC

break-time

Actions Status crates.io dependency status MIT license

break-time 是一个在电脑工作时强制你休息的应用程序。这对于想避免长时间坐着或长时间盯着电脑屏幕的人来说很方便。

break-time 的主要特点是无法轻易提前结束休息。一旦开始休息,就必须停止使用电脑。然而,提供了插件以避免在不便的时候休息。例如,有一个插件可以避免在 Google 日历上有活动时休息,以及一个插件可以避免在 Google Meet 视频聊天时休息。

break-time 目前只能在 Linux 的 X11 上运行。但是,欢迎提交 PR 以添加对其他平台和窗口系统的支持。

安装

break-time 需要一些系统库可用。在 Debian/Ubuntu 系统上,可以使用以下命令安装

$ sudo apt-get install libgtk-3-dev libxcb-screensaver0-dev

之后,可以使用 cargo 安装 break-time

$ cargo install break-time

用法

一旦安装了 break-time,建议运行一次,以便创建配置文件。运行后立即使用 Ctrl-C 杀死它。

$ break-time
^C

break-time 应该在 ~/.config/break-time/config.toml 中创建一个配置文件。在文本编辑器中打开此配置文件以查看可用的选项。如果任何选项的解释不清楚,请打开一个 issue。

最有意思的选项可能是 accounts(或 plugin.google_calendar.accounts)。这将在下一节中描述。

配置后,再次运行 break-time。

$ break-time

break-time 将倒计时,直到下一次休息时间。

break-time 将创建一个系统托盘图标。将鼠标悬停在它上面,它会告诉你下一次休息还有多少分钟。右键单击系统托盘图标可以暂停和继续休息倒计时。

到下一次休息时间时,break-time 将弹出一个屏幕告诉你休息。除非 break-time 结束或你按下空格键 400 次,否则无法关闭此屏幕。

插件

break-time拥有用于防止休息发生的插件。在休息即将发生之前,break-time会查询所有插件,并询问是否真的可以开始休息。本节将解释插件的工作原理以及如何配置它们。

X 窗口标题(视频聊天)

X 窗口标题插件会检查是否存在具有给定名称和标题的X窗口。

当你正在进行视频聊天时,这可以方便地阻止休息发生。

目前,此插件仅检查几个特定的窗口名称和标题。你可以在此处函数中查看所检查的窗口名称和标题。

如果你想要支持额外的应用程序,请提出一个修改此函数的问题或发送一个PR。

检查此插件是否正常工作的方法之一是使用较短的休息间隔启动break-time,然后在Firefox或Chromium中打开https://meet.google.com/。当https://meet.google.com/打开时(并且当前聚焦的标签页),break-time不应启动休息。

Google日历

Google日历插件会检查你的Google日历上是否正在发生事件。如果有事件发生,插件将阻止break-time开始休息。

当你在工作中的会议时,这可以方便地阻止休息发生。

在使用此插件之前,需要对其进行一些配置。首先,你必须将你的Gmail地址添加到break-time的配置文件中,~/.config/break-time/config.toml。应将accounts(或plugin.google_calendar.accounts)字段设置为你的Gmail地址列表。建议一次只添加一个。

如果你的Gmail地址是example@gmail.com,配置文件将如下所示

[plugin.google_calendar]
accounts = [ "[email protected]", ]

添加后,重新启动break-time。break-time应该输出如下消息

$ break-time
Please direct your browser to http://127.0.0.1/o/oauth2/auth... and follow the instructions displayed there.

确保你在浏览器中登录了example@gmail.com(而不是另一个电子邮件地址)。点击链接。你应该会看到一个“选择帐户”页面(只要你有多于一个的Gmail帐户)。请确保选择example@gmail.com

接下来,你将看到一个警告,说明break-time应用程序未经验证。点击“高级”链接,然后点击“转到Break Time(不安全)”。

(目前这是必要的,因为我还没有完成Google对于Google日历API使用验证请求。有关更多信息,请参阅问题#11。)

下一屏将要求你授予break-time以下两个权限

  • 查看所有日历的事件

    这允许break-time检查你日历上事件的开始和结束时间。

  • 查看你的日历

    这允许break-time确定你拥有的哪些日历,以便确定在哪里查找事件。

一旦你授予break-time这些权限,break-time将把OAuth令牌保存在~/.cache/break-time/google-calendar/磁盘上。这将允许break-time在将来无需再次通过此授权步骤的情况下继续检查你的Google日历。

请注意,break-time不会在磁盘上存储您的日历数据,并且在从Google日历API接收后绝对不会通过网络传输它。如果您担心使用此插件,我建议您阅读google_calendar.rs的源代码。[点击查看](https://github.com/cdepillabout/break-time/blob/master/src/scheduler/plugins/google_calendar.rs)。唯一的安全担忧是,break-time将OAuth令牌存储在磁盘上,以便下次启动break-time时可以重用它。

如果您想使用break-time与多个Google日历账户,您可以添加多个地址到plugin.google_calendar.accounts。尽管如此,我建议一次只添加一个账户并执行授权。

检查此插件是否工作的一种方法是在您的日历上设置一个短休息间隔,并创建一个事件。break-time在事件正在进行时不应开始休息。

为什么

我注意到我长时间坐在电脑前。我认为这可能导致脖子或肩膀疼痛,因此我想找到一种强迫自己多休息的方法。

我尝试了几种解决方案,包括手动厨房计时器、手机上的计时器,以及像Stretchly这样的应用程序等。然而,我从未找到真正有效的东西。

我对其他解决方案有三个主要问题

  • 忽略休息太容易了。当我用手机上的计时器时,我经常关掉闹钟继续工作。当我使用Stretchly时,我经常在开始休息时退出。

    break-time通过使跳过休息变得非常困难来解决这个问题。一旦开始休息,您就必须离开电脑。

  • 休息发生的时间不方便。您不希望休息发生在您正在做重要事情的时候,比如在会议或视频聊天中。

    break-time通过插件检测您是否在会议或视频聊天中来解决这个问题。

  • 没有即将到来的休息的警告。与其他解决方案一样,当休息在您的工作中突然发生时,会感到非常沮丧。

    break-time通过在系统托盘图标中有一个倒计时计时器来解决这个问题。您将获得五分钟的时间来完成您正在编写的任何代码、在Slack上撰写的消息、正在阅读的文档等。

break-time是我创建的第一个非平凡Rust程序,目前大约有2,500行(包括空白和注释)。

编写break-time的主要困难是试图找到一种好的抽象来处理所有并发代码。最后,我觉得我没有做到这一点,但我创建了一个[问题](https://github.com/cdepillabout/break-time/issues/5)来思考如何改进这一点。

贡献

请随意为任何错误、问题、建议或改进打开一个问题或PR。

依赖关系

~31–42MB
~884K SLoC