Sachin Patil


Free Software developer & Emacser

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-diary"))

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.