emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r109176: erc-notifications: new file


From: Julien Danjou
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r109176: erc-notifications: new file
Date: Sat, 21 Jul 2012 13:08:32 +0200
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 109176
committer: Julien Danjou <address@hidden>
branch nick: trunk
timestamp: Sat 2012-07-21 13:08:32 +0200
message:
  erc-notifications: new file
added:
  lisp/erc/erc-notifications.el
modified:
  lisp/erc/ChangeLog
=== modified file 'lisp/erc/ChangeLog'
--- a/lisp/erc/ChangeLog        2012-06-15 14:47:31 +0000
+++ b/lisp/erc/ChangeLog        2012-07-21 11:08:32 +0000
@@ -1,3 +1,7 @@
+2012-07-21  Julien Danjou  <address@hidden>
+
+       * erc-notifications.el: New file.
+
 2012-06-15  Julien Danjou  <address@hidden>
 
        * erc.el (erc-open): Use `auth-source' for password retrieval when

=== added file 'lisp/erc/erc-notifications.el'
--- a/lisp/erc/erc-notifications.el     1970-01-01 00:00:00 +0000
+++ b/lisp/erc/erc-notifications.el     2012-07-21 11:08:32 +0000
@@ -0,0 +1,90 @@
+;; erc-notifications.el -- Send notification on PRIVMSG or mentions
+
+;; Copyright (C) 2012 Free Software Foundation, Inc.
+
+;; Author: Julien Danjou <address@hidden>
+;; Keywords: comm
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs 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 GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This implements notifications using `notifications-notify' on
+;; PRIVMSG received and on public nickname mentions.
+
+;;; Code:
+
+(require 'erc)
+(require 'xml)
+(require 'notifications)
+(require 'erc-match)
+(require 'dbus)
+
+(defgroup erc-notifications nil
+  "Send notifications on PRIVMSG or mentions."
+  :group 'erc)
+
+(defvar erc-notifications-last-notification nil
+  "Last notification id.")
+
+(defcustom erc-notifications-icon nil
+  "Icon to use for notification."
+  :group 'erc-notifications
+  :type 'file)
+
+(defun erc-notifications-notify (nick msg)
+  "Notify that NICK send some MSG.
+This will replace the last notification sent with this function."
+  (dbus-ignore-errors
+    (setq erc-notifications-last-notification
+          (notifications-notify :title (xml-escape-string nick)
+                                :body (xml-escape-string msg)
+                                :replaces-id 
erc-notifications-last-notification
+                                :app-icon erc-notifications-icon))))
+
+(defun erc-notifications-PRIVMSG (proc parsed)
+  (let ((nick (car (erc-parse-user (erc-response.sender parsed))))
+        (target (car (erc-response.command-args parsed)))
+        (msg (erc-response.contents parsed)))
+    (when (and (erc-current-nick-p target)
+               (not (and (boundp 'erc-track-exclude)
+                         (member nick erc-track-exclude)))
+               (not (erc-is-message-ctcp-and-not-action-p msg)))
+      (erc-notifications-notify nick msg)))
+  ;; Return nil to continue processing by ERC
+  nil)
+
+(defun erc-notifications-notify-on-match (match-type nickuserhost msg)
+  (when (eq match-type 'current-nick)
+    (let ((nick (nth 0 (erc-parse-user nickuserhost))))
+      (unless (or (string-match-p "^Server:" nick)
+                  (when (boundp 'erc-track-exclude)
+                    (member nick erc-track-exclude)))
+        (erc-notifications-notify nick msg)))))
+
+;;;###autoload(autoload 'erc-notifications-mode "erc-notifications" "" t)
+(define-erc-module notifications nil
+  "Send notifications on private message reception and mentions."
+  ;; Enable
+  ((add-hook 'erc-server-PRIVMSG-functions 'erc-notifications-PRIVMSG)
+   (add-hook 'erc-text-matched-hook 'erc-notifications-notify-on-match))
+  ;; Disable
+  ((remove-hook 'erc-server-PRIVMSG-functions 'erc-notifications-PRIVMSG)
+   (remove-hook 'erc-text-matched-hook 'erc-notifications-notify-on-match)))
+
+(provide 'erc-notifications)
+
+;;; erc-notifications.el ends here


reply via email to

[Prev in Thread] Current Thread [Next in Thread]