org-notify
不是第三方包吗?
org-mode 自带
引用哪个包?
org-notify
恐怕是不行哦
(defun org-notify (notification &optional play-sound)
"Send a NOTIFICATION and maybe PLAY-SOUND.
If PLAY-SOUND is non-nil, it overrides `org-clock-sound'."
(org-show-notification notification)
(if play-sound (org-clock-play-sound play-sound)))
使用了org-show-notification
,而它又是这样定义的:
(defun org-show-notification (notification)
"Show notification.
Use `org-show-notification-handler' if defined,
use libnotify if available, or fall back on a message."
(cond ((functionp org-show-notification-handler)
(funcall org-show-notification-handler notification))
((stringp org-show-notification-handler)
(start-process "emacs-timer-notification" nil
org-show-notification-handler notification))
((fboundp 'notifications-notify)
(notifications-notify
:title "Org mode message"
:body notification
;; FIXME how to link to the Org icon?
;; :app-icon "~/.emacs.d/icons/mail.png"
:urgency 'low))
((executable-find "notify-send")
(start-process "emacs-timer-notification" nil
"notify-send" notification))
;; Maybe the handler will send a message, so only use message as
;; a fall back option
(t (message "%s" notification))))
可能最后只能用message
来显示消息了
在 windows 10 上测试通过,如图:
1 个赞
我比较好奇为什么能够成功。。
能够检查一下这些值么:
- 看一下
org-show-notification-handler
的值是什么 -
(fboundp 'notifications-notify)
的结果是什么 -
(executable-find "notify-send")
的结果是什么
Debugger entered--Lisp error: (dbus-error "Emacs not compiled with dbus support")
signal(dbus-error ("Emacs not compiled with dbus support"))
dbus-call-method(:session "org.freedesktop.Notifications" "/org/freedesktop/Notifications" "org.freedesktop.Notifications" "Notify" :string "Emacs" :uint32 0 :string "d:/emacs27/share/emacs/28.0.50/etc/images/icons/hi..." :string "Org mode message" :string "message!" (:array) ((:dict-entry "urgency" (:variant :byte 0))) :int32 -1)
notifications-notify(:title "Org mode message" :body "message!" :urgency low)
org-show-notification("message!")
org-notify("message!")
(progn (org-notify "message!"))
eval((progn (org-notify "message!")) t)
elisp--eval-last-sexp(nil)
eval-last-sexp(nil)
funcall-interactively(eval-last-sexp nil)
call-interactively(eval-last-sexp nil nil)
command-execute(eval-last-sexp)
看来不行,windows 7 可以装dbus吗?还是要重新编译?
org-show-notification-handler 的是nil
org-show-notification-handler is a variable defined in ‘org-clock.el’.
Its value is nil
You can customize this variable.
(fboundp 'notifications-notify) 返回 t (executable-find “notify-send”) 返回nil
和 楼上的结果一样
震惊!原来 Windows 10 有 DBUS 支持了
懒得弄了,反正可以曲线救国
;; 添加finished hooks
(add-hook 'org-pomodoro-finished-hook
(lambda ()
(w32-shell-execute "open" "f://bz.jpg")))
(add-hook 'org-pomodoro-break-finished-hook
(lambda ()
(w32-shell-execute "open" "f://bk.jpg")))
(add-hook 'org-pomodoro-long-break-finished-hook
(lambda ()
(w32-shell-execute "open" "f://bz.jpg")))
在windows下直接重新做一个alert包让org-pomodoro包含进去,就可以使用了,看源码org-pomodoro只在一个地方调用alert函数。
(require 'cl-lib)
(defvar *alert-id* nil)
(cl-defun alert (message &key (severity 'normal) title icon category
buffer mode data style persistent never-persist
id)
"docstring"
(when *alert-id*
(w32-notification-close *alert-id*))
(setq *alert-id* (w32-notification-notify :title title :body message)))
刚刚自己测试一下,可以收到通知。
如果使用dwm窗口管理器,notify-send
会不能弹出通知窗口,安装了notification-daemon
这个包就可以弹出了
在 win10 上测试过,org-notify 确实可以使用,非常感谢