org-clock-watch 给org-clock添加提醒功能,欢迎大家试用

之前一直用org-pomodoro,后来发现不符合我的工作流,就自己写了一个简单的包 org-clock-watch on gitee, org-clock-watch on github 主要目的有三个:

  1. 记录工作时间,方便统计在每个工作项目上花的时间
  2. 防止过渡劳累工作,周期性提醒休息
  3. 在各种任务之间合理分配时间

由于org-clock 本身功能很强大, 我的主体思路是,只监视org-clock, 用户只要使用org-clock的命令计时即可,alarm的任务交给org-clock-watch自动完成,不需要用户过多考虑.

如果下面的工作流符合你的要求,可以尝试用用:

  1. 打开emacs

  2. 开始做你想做的事情 (不限于emacs)

  3. 忘记计时了,org-clock-watch弹出提醒,播放声音,打开工作计划文件, 你可以用org-clock-in 来计时

  4. 忘记设置提醒时长了, org-clock-watch弹出提醒,播放声音,定位到计时项目, 你可以用 org-set-effort 来设置提醒时长

  5. 如果你愿意也可以直接打开工作目录并对某个工作计时, 并设置effort, org-clock-watch 能够识别这些情景

  6. 超过时长则周期性弹出提醒,播放声音,直到你结束计时 org-clock-out

  7. 你发现时间不够,需要再多工作5分钟,点击提醒框中的"5 min",提醒自动延后5 分钟

  8. 你发现设置的effort 不合理, 可以用 org-clock-modify-effort-estimate 重新设置effort

  9. 你临时有事离开电脑一会儿, 该包会自动识别, 停止提醒,直到你回来. org-clock 弹出恢复窗口,引导你恢复计时,比如从计时中扣除10分钟等等

  10. 一周以后,你想看看这一周你都做了什么, 打开工作计划文件, 运行 org-clock-report 则以表格方式给出花费时间分布.

总之, 你只需要运行org-clock 的计时命令,剩下的不用你管.

8 个赞

感觉这个设置时长是在指 org 里的 Effort 机制,超过 Effort 之后,org 默认是会用org-show-notification-handler来提示工作时间超过预定时间

2 个赞

一直没有弄清楚effort是什么东西, 我试试看,如果能满足我的工作流那就更好了.

还有一点, 我经常发现自己忘记计时了, 所以还是需要一个包来不断提醒自己计时.

已经把interval时长改成了org-clock 的effort,

org-clock自己的effort机制超时只提醒一次, org-clock-watch 会周期性提醒, 另外org-clock-watch 会检测emacs有没有clock-in, 有没有设置effort, 如果没有也会周期性提醒.

总之,org-clock-watch 只监视和提醒, 你要做的是使用org-clock(包括effort)的命令

1 个赞

我觉得这个功能 org-clock 是有点缺失,能不能提交至 org 官方呀?确实有个重复提醒的功能不错

看org-clock的代码,只提醒一次是有意实现的功能,它仍然是每次都检查,但是有个开关,如果提醒了一次,就pypass 提醒。 要实现多次提醒,只要关掉这个开关,在加一个interval 就好了。

你如果有兴趣可以提个pr或者issue到org-clock。看上游会不会接受。

org-clock-watch 是为了适合我自己的工作流而定制的,有很多个人特点,可能不适合merge到org-clock。

试用的时候报错:

Error running timer ‘org-clock-watcher’: (void-variable org-pomodoro-no-set-me-icon)

已经解决了, M-x quelpa-upgrade 来更新包就可以了.

如果想要使用电脑的idle时间(而不是emacs的idle 时间) 需要安装 xprintidle

如果是ubuntu系统 :

  1. sudo apt install xprintidle
  2. M-x customize-varialbe org-clock-x11idle-program-name , 把设置改成 xprintidle 即可

详情请参考emacs 手册

On computers using macOS, idleness is based on actual user idleness, not just Emacs’ idle time. For X11, you can install a utility program ‘x11idle.c’, available in the ‘contrib/scripts/’ directory of the Org Git distribution, or install the xprintidle package and set it to the variable org-clock-x11idle-program-name if you are running Debian, to get the same general treatment of idleness. On other systems, idle time refers to Emacs idle time only.

大赞, 养成了我clock in 的习惯

aplay能否替换成mplayer.exe,让windows系统也能使用

加了一个变量,我没有windows系统,你可以测试一下,设置成 “mplayer.exe" 可不可?

+(defcustom org-clock-watch-play-sound-fn-name
+  "aplay" "shell command name for play the sound file"
+  :group 'org-clock-watch
+  :type 'string)
+

可以设置mplayer,windows用户还是有bug,

跟shell-command执行的wmctrl有关,windows没有这个命令,印象中eaf解决过这种跨平台问题。感谢哈,给你反馈一下。 :joy:

(shell-command "wmctrl -x -a Emacs")

这个命令只是聚焦emacs窗口,比如你在浏览网页,emacs提醒超时,你点击按钮会自动聚焦到emacs。 我加了一个变量,如果为空字符串,则关闭这个功能。你也可是设置个成windows下的命令,如果有问题,可以提issue给我,这样方便所有人了解bug。

(defcustom org-clock-watch-focus-emacs-window-command-str ""
"shell command string to focus emacs window, empty string means this function is off,
on linux you can use `wmctrl -xa Emacs', on windows you can reference `nircmd' or other command
"
  :group 'org-clock-watch
  :type 'string)

已提 :+1:

windows下调用 notifications-notify 就会报 dbus 错误了,跟声音啥的没关系

dbus 错误跟播放声音是没关系,但是按照官方文档,windows系统是支持notifications-notify的:

Emacs is able to send “notifications” on systems that support the
freedesktop.org Desktop Notifications Specification and on MS-Windows.
In order to use this functionality on POSIX hosts, Emacs must have been
compiled with D-Bus support, and the ‘notifications’ library must be
loaded. ....

所以dbus的错误在linux系统中是emacs在编译的时候需要选择支持dbus选项,在windos 系统中文档意思说是不需要emacs编译的,个人怀疑是系统没有安装dbus,只要安装dbus就可以了,我不用windos不确定对不对。

安装dbus看起来也挺麻烦,还不确定能不能用