diff options
Diffstat (limited to 'jabber-libnotify.el')
-rw-r--r-- | jabber-libnotify.el | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/jabber-libnotify.el b/jabber-libnotify.el new file mode 100644 index 0000000..bf4d44c --- /dev/null +++ b/jabber-libnotify.el @@ -0,0 +1,103 @@ +;; jabber-libnotify.el - emacs-jabber interface to libnotify + +;; Copyright (C) 2010 - Kirill A. Korinskiy - catap@catap.ru +;; Copyright (C) 2007 - Rodrigo Lazo - rlazo.paz@gmail.com + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program; if not, write to the Free Software +;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +(require 'dbus nil t) +(eval-when-compile (require 'jabber-alert)) + +(defcustom jabber-libnotify-icon "" + "Icon to be used on the notification pop-up. Default is empty" + :type '(file :must-match t) + :group 'jabber-alerts) + + +(defcustom jabber-libnotify-timeout 2500 + "Specifies the timeout of the pop up window in millisecond" + :type 'integer + :group 'jabber-alerts) + +(defcustom jabber-libnotify-message-header "Jabber message" + "Defines the header of the pop up." + :type 'string + :group 'jabber-alerts) + +(defcustom jabber-libnotify-app "Emacs Jabber" + "Defines the app of the pop up." + :type 'string + :group 'jabber-alerts) + +(defcustom jabber-libnotify-urgency "low" + "Urgency of libnotify message" + :type '(choice (const :tag "Low" "low") + (const :tag "Normal" "normal") + (const :tag "Critical" "critical")) + :group 'jabber-alerts) + +(defcustom jabber-libnotify-method (if (featurep 'dbus) 'dbus 'shell) + "Specifies the method for libnotify call. Dbus is more faster but require emacs23+" + :type '(choice (const :tag "Shell" shell) + (const :tag "D-Bus" dbus)) + :group 'jabber-alerts) + +(defvar jabber-libnotify-id 0) + +(defun jabber-libnotify-next-id () + "Return the next notification id." + (setq jabber-libnotify-id (+ jabber-libnotify-id 1))) + +(defun jabber-libnotify-message (text &optional title) + "Show MSG using libnotify" + (let + ((body (or (jabber-escape-xml text) " ")) + (head (jabber-escape-xml + (or title + (or jabber-libnotify-message-header " ") + text)))) + ;; Possible errors include not finding the notify-send binary. + (condition-case e + (cond + ((eq jabber-libnotify-method 'shell) + (let ((process-connection-type nil)) + (start-process "notification" nil "notify-send" + "-t" (format "%s" jabber-libnotify-timeout) + "-i" (or jabber-libnotify-icon "\"\"") + "-u" jabber-libnotify-urgency + head body))) + ((eq jabber-libnotify-method 'dbus) + (dbus-call-method + :session ; use the session (not system) bus + "org.freedesktop.Notifications" ; service name + "/org/freedesktop/Notifications" ; path name + "org.freedesktop.Notifications" "Notify" ; Method + jabber-libnotify-app + (jabber-libnotify-next-id) + jabber-libnotify-icon + ':string (encode-coding-string head 'utf-8) + ':string (encode-coding-string body 'utf-8) + '(:array) + '(:array :signature "{sv}") + ':int32 jabber-libnotify-timeout))) + (error nil)))) + +(define-jabber-alert libnotify "Show a message through the libnotify interface" + 'jabber-libnotify-message) +(define-personal-jabber-alert jabber-muc-libnotify) + +(provide 'jabber-libnotify) + +;; arch-tag: e9c4c210-8245-11dd-bddf-000a95c2fcd0 |