--- /dev/null
+;;; erc-nick-notify.el --- Notify popup for ERC
+
+;; Filename: erc-nick-notify.el
+;; Description: Notify popup for ERC
+;; Author: Andy Stewart lazycat.manatee@gmail.com
+;; Maintainer: Andy Stewart lazycat.manatee@gmail.com
+;; Copyright (C) 2008, 2009, Andy Stewart, all rights reserved.
+;; Created: 2008-12-04 12:47:28
+;; Version: 0.2.1
+;; Last-Updated: 2009-01-31 10:47:32
+;; By: Andy Stewart
+;; URL: http://www.emacswiki.org/emacs/download/erc-nick-notify.el
+;; Keywords: erc, notify
+;; Compatibility: GNU Emacs 23.0.60.1
+;;
+;; Features that might be required by this library:
+;;
+;; `erc'
+;;
+
+;;; This file is NOT part of GNU Emacs
+
+;;; License
+;;
+;; 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 3, 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; see the file COPYING. If not, write to
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
+;; Floor, Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+;;
+;; Notify popup for ERC
+;;
+;; This extension use `notify-send' for notify.
+;; So make you have install `notify-send' in your system.
+;;
+
+;;; Installation:
+;;
+;; Put erc-nick-notify.el to your load-path.
+;; The load-path is usually ~/elisp/.
+;; It's set in your ~/.emacs like this:
+;; (add-to-list 'load-path (expand-file-name "~/elisp"))
+;;
+;; And the following to your ~/.emacs startup file.
+;;
+;; (require 'erc-nick-notify)
+;;
+;; No need more.
+
+;;; Customize:
+;;
+;; `erc-nick-notify-delay'
+;; The delay time that between two messages.
+;; `erc-nick-notify-cmd'
+;; The command that use for notify.
+;; `erc-nick-notify-icon'
+;; The file name of icon display.
+;; `erc-nick-notify-timeout'
+;; The timeout in milliseconds at which to expire the notification.
+;; `erc-nick-notify'
+;; The urgency level.
+;; `erc-nick-notify-category'
+;; The notification category.
+;;
+;; All of the above can be customize by:
+;; M-x customize-group RET erc-nick-notify RET
+;;
+
+;;; Change log:
+;;
+;; 2009/01/31
+;; Fix doc.
+;;
+;; 2008/12/21
+;; Fix `void-variable' bug.
+;;
+;; 2008/12/08
+;; Add customize support.
+;;
+;; 2008/12/04
+;; First released.
+;;
+
+;;; Acknowledgements:
+;;
+;;
+;;
+
+;;; TODO
+;;
+;;
+;;
+
+;;; Require
+(require 'erc)
+
+;;; Code:
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Customize ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defgroup erc-nick-notify nil
+ "Notify popup for ERC."
+ :group 'erc)
+
+(defcustom erc-nick-notify-delay '(0 5 0)
+ "The delay time that between two message.
+Default is 5 minutes."
+ :type 'list
+ :group 'erc-nick-notify)
+
+(defcustom erc-nick-notify-cmd "notify-send"
+ "The command that use for notify."
+ :type 'string
+ :group 'erc-nick-notify)
+
+(defcustom erc-nick-notify-icon "~/MyEmacs/Image/Irc.png"
+ "Specifies an icon filename or stock icon to display."
+ :type 'string
+ :group 'erc-nick-notify)
+
+(defcustom erc-nick-notify-timeout 10000
+ "Specifies the timeout in milliseconds at which to expire the notification."
+ :type 'number
+ :group 'erc-nick-notify)
+
+(defcustom erc-nick-notify-urgency "low"
+ "Specifies the urgency level (low, normal, critical)."
+ :type 'string
+ :group 'erc-nick-notify)
+
+(defcustom erc-nick-notify-category "im.received"
+ "Specifies the notification category."
+ :type 'string
+ :group 'erc-nick-notify)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Variable ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defvar erc-nick-notify-last '(0 0 0)
+ "The last time that receive message.")
+
+(defvar erc-nick-notify-buffer nil
+ "The buffer name of last notify me.")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Interactive Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defun erc-nick-notify-jump-last-channel ()
+ "Jump to last channel that notify me."
+ (interactive)
+ (if erc-nick-notify-buffer
+ (switch-to-buffer erc-nick-notify-buffer)
+ (message "Nobody notify you in IRC.")))
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Utilities Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defun erc-nick-notify ()
+ "Notify me when my nick show up.
+This function should be in the insert-post-hook."
+ (let ((now (current-time)))
+ (when (time-less-p erc-nick-notify-delay
+ (time-since erc-nick-notify-last))
+ (setq erc-nick-notify-last now)
+ (goto-char (point-min))
+ (when (re-search-forward
+ (concat "\\("
+ "\\(<\\([^>]*\\)>\\)" ; <someone>
+ "\\|"
+ ;; Don't match if we're saying something
+ "\\(\\* " (regexp-quote (erc-current-nick)) "\\)"
+ "\\)"
+ "\\(.*" (regexp-quote (erc-current-nick)) ".*\\)")
+ nil t)
+ (let ((msg (concat
+ (when (> (length (match-string-no-properties 2)) 0)
+ (concat "<b><" (match-string-no-properties 3)
+ "></b> "))
+ (match-string-no-properties 5))))
+ (setq erc-nick-notify-buffer (buffer-name))
+ (shell-command (concat erc-nick-notify-cmd
+ " -i " erc-nick-notify-icon
+ " -t " (int-to-string
+ erc-nick-notify-timeout)
+ " -u " erc-nick-notify-urgency
+ " -c " erc-nick-notify-category
+ " -- "
+ " \"" erc-nick-notify-buffer "\""
+ " \""
+ (if (boundp 'msg)
+ msg "")
+ "\"")))))))
+
+;; Add `erc-nick-notify' to `erc-insert-post-hook'
+(add-hook 'erc-insert-post-hook 'erc-nick-notify)
+
+(provide 'erc-nick-notify)
+
+;;; erc-nick-notify.el ends here
+
+;;; LocalWords: erc cmd im msg lt