Last edit
Summary: Update
Changed:
< "Notify popup for ircir."
to
> "Notify popup for ircirc."
;;; rcirc-notify+.el --- Rcirc notify library ;; 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-06-08 12:45:24 ;; Version: 1.0 ;; Last-Updated: 2008-06-08 12:45:27 ;; URL: http://www.emacswiki.org/emacs/download/rcirc-notify+.el ;; Keywords: rcirc, notify ;; Compatibility: GNU Emacs 23.0.60.1 ;; 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. ;; Features that might be required by this library: ;; ;; `rcirc' ;; ;;; Commentary: ;; ;; Notify popup for rcirc ;; ;; This extension use `notify-send' for notify. ;; So make you have install `notify-send' in your system. ;; ;;; Installation: ;; ;; Copy rcirc-notify+.el to your load-path and add to your ~/.emacs ;; ;; (require 'rcirc-notify+) ;; ;; Rcirc will notify you automatically when have a message is reach, blow is open ;; rcirc notify switcher: ;; (setq rcirc-notify+-open t) ;; ;; Little tips: ;; Function 'rcirc-notify+-jump-last-message-channel' can jump last channel that ;; message notify you. ;; And feel free to binding it to you like. ^_^ ;; ;;; Change log: ;; ;; 2008/06/08 ;; First release. ;; ;;; Acknowledgments: ;; ;; Will Farrington for rcirc-notify+.el ;; ;;; TODO ;; ;; None ;; ;; Require (require 'rcirc) ;;; Code: (defgroup rcirc-notify+ nil "Notify popup for ircirc." :group 'rcirc) (defcustom rcirc-notify+-open t "The switcher that notify me." :type 'boolean :group 'rcirc-notify+) (defcustom rcirc-notify+-delay 1 "Number of seconds that will elapse between notifications from the same person." :type 'integer :group 'rcirc-notify+) (defcustom rcirc-notify+-cmd "notify-send" "The command that use for notify." :type 'string :group 'rcirc-notify+) (defcustom rcirc-notify+-icon "~/MyEmacs/Image/Irc.png" "Specifies an icon filename or stock icon to display." :type 'string :group 'rcirc-notify+) (defcustom rcirc-notify+-timeout 10000 "Specifies the timeout in milliseconds at which to expire the notification." :type 'number :group 'rcirc-notify+) (defcustom rcirc-notify+-urgency "low" "Specifies the urgency level (low, normal, critical)." :type 'string :group 'rcirc-notify+) (defcustom rcirc-notify+-category "im.received" "Specifies the notification category." :type 'string :group 'rcirc-notify+) (defvar rcirc-notify+-nick-alist nil "An alist of nicks and the last time they tried to trigger a notification.") (defvar rcirc-last-position nil "The last message position in rcirc buffers.") (defun rcirc-notify+ (sender &optional private) "Rcirc notify." (interactive) (let ((last-channel nil) (last-server nil)) (when (and rcirc-notify+-open ;if notify switcher is open rcirc-target) ;if is a null channel (ignore the first message from server) (setq last-channel rcirc-target) ;get channel name or use name (from private message) (setq last-server (with-rcirc-server-buffer rcirc-server-name)) ;get random server name (string-match "^[^.]*" last-server) ;replace random server name use string @irc (setq last-server (replace-match "@irc" nil nil last-server 0)) (setq rcirc-last-position (concat last-channel last-server)) ;general irc buffer name that last message to me (if private (rcirc-notify+-popup (format "%s send a private message." sender)) (rcirc-notify+-popup (format "%s send message." sender)))))) (defun rcirc-notify+-popup (msg) "Popup notify window." (shell-command (concat rcirc-notify+-cmd " -i " rcirc-notify+-icon " -t " (int-to-string rcirc-notify+-timeout) " -u " rcirc-notify+-urgency " -c " rcirc-notify+-category " -- " " \"" rcirc-last-position "\"" " \"" (if (boundp 'msg) msg "") "\""))) (defun rcirc-notify+-jump-last-message-channel() "Jump to last message that call you." (interactive) (if rcirc-last-position (switch-to-buffer rcirc-last-position) (cycle-buffer-in-special-mode 'rcirc-mode))) (defun rcirc-notify+-toggle() "Toggle rcirc notify." (interactive) (if rcirc-notify+-open (progn (setq rcirc-notify+-open nil) (message "Closed IRC Notify")) (setq rcirc-notify+-open t) (message "Opened IRC Notify"))) (defun rcirc-notify+-allowed (nick &optional delay) "Return non-nil if a notification should be made for NICK. If DELAY is specified, it will be the minimum time in seconds that can occur between two notifications. The default is `rcirc-notify+-delay'." (unless delay (setq delay rcirc-notify+-delay)) (let ((cur-time (time-to-seconds (current-time))) (cur-assoc (assoc nick rcirc-notify+-nick-alist)) (last-time)) (if cur-assoc (progn (setq last-time (cdr cur-assoc)) (setcdr cur-assoc cur-time) (> (abs (- cur-time last-time)) delay)) (push (cons nick cur-time) rcirc-notify+-nick-alist) t))) (defun rcirc-notify+-me (proc sender response target text) "Notify the current user when someone sends a message that matches a regexp in `rcirc-keywords'." (interactive) (when (and (string-match (rcirc-nick proc) text) (not (string= (rcirc-nick proc) sender)) (not (string= (rcirc-server-name proc) sender)) (rcirc-notify+-allowed sender)) (rcirc-notify+ sender nil))) (defun rcirc-notify+-privmsg (proc sender response target text) "Notify the current user when someone sends a private message to them." (interactive) (when (and (string= response "PRIVMSG") (not (string= sender (rcirc-nick proc))) (not (rcirc-channel-p target))) (rcirc-notify+ sender t))) (add-hook 'rcirc-print-hooks 'rcirc-notify+-privmsg) (add-hook 'rcirc-print-hooks 'rcirc-notify+-me) (provide 'rcirc-notify+) ;;; rcirc-notify+.el ends here ;;; LocalWords: Farrington cmd im msg privmsg