Sachin Patil

Sachin Patil

Free Software Developer | GNU Emacs Hacker

Emacs Diary reminder using desktop notification
Published on May 03, 2019 by Sachin.

The post explains how to configure Emacs to alert diary reminders using Freedesktop notification protocol.


Figure 1: Emacs Diary desktop notification

Inspired by the post Use Emacs as a reminder, where the terminal-notifier is used to send Emacs Diary reminder on MacOS, I decided to make use of notification extension which is builtin within Emacs to send Desktop notifications via D-Bus.

Start by importing a notification extension and create a placeholder for session bus:

1: (require 'notifications)
3: (defcustom appt-notification-bus :session
4:   "D-Bus bus to use for notification."
5:   :version "25.1"
6:   :group 'appt-notification
7:   :type '(choice (const :tag "Session bus" :session) string))

Once the session bus is in place, create a function to send a notification via D-Bus using the notifications-notify:

1: (defun psachin/appt-display (min-to-app new-time msg)
2:   "Send notification."
3:   (notifications-notify :bus appt-notification-bus
4:                         :title (format "Appointment in %s minutes." min-to-app)
5:                         :body (format "%s" msg)
6:                         :replaces-id nil
7:                         :app-icon nil
8:                         :timeout 5000
9:                         :desktop-entry "emacs"))

Finally call the function as a value to the variable appt-disp-window-function

(setq appt-disp-window-function (function psachin/appt-display))

Test the notification by creating an entry in Emacs diary, for ex:

        20:10 to 20:30 Meeting with Rey

Refer the entire configuration here.