ercn allows for flexible notification rules in ERC. You can
configure it to notify for certain classes of users, query buffers,
certain buffers, etc. It utilizes functions (and a small bit of
copy pasta) from erc-match to get the job done. See the
documentation for `ercn-notify-rules' and `ercn-suppress-rules' to
set it up.

When a notification is needed, ercn calls `ercn-notify-hook' so
that any notification mechanism available for your system can be
utilized with a little elisp.

Installation:
=============

Via Marmalade (recommended)
---------------------------

If you are on Emacs 23, go to marmalade-repo.org and follow the installation
instructions there.

If you are on Emacs 24, add Marmalade as a package archive source in
~/.emacs.d/init.el:

  (require 'package)
  (add-to-list 'package-archives
      '("marmalade" . "http://marmalade-repo.org/packages/") t)
  (package-initialize)

Then you can install it:

  M-x package-refresh-contents
  M-x package-install RET ercn RET

Manually (via git)
------------------

Download the source or clone the repo and add the following to
~/.emacs.d/init.el:

  (add-to-list 'load-path "path/to/ercn")
  (require 'ercn)

Configuration
=============

Two variables control whether or not ercn calls `ercn-notify-hook':

* `ercn-notify-rules': Rules to determine if the hook should be called. It
  defaults to calling the hook whenever a pal speaks, a keyword is mentioned,
  your current-nick is mentioned, or a message is sent inside a query buffer.

* `ercn-suppress-rules': Rules to determine if the notification should be
  suppressed. Takes precedent over `ercn-notify-rules'. The default will
  suppress messages from fools, dangerous-hosts, and system messages.

Both vars are alists that contain the category of message as the keys and as
the value either the symbol ‘all, a list of buffer names in which to
notify or suppress, or a function predicate.

The supported categories are:

* message - category added to all messages
* current-nick - messages that mention you
* keyword - words in the `erc-keywords' list
* pal - nicks in the `erc-pals' list
* query-buffer - private messages
* fool - nicks in the `erc-fools' list
* dangerous-host - hosts in the `erc-dangerous-hosts' list
* system - messages sent from the system (join, part, etc.)

An example configuration
------------------------

  (setq ercn-notify-rules
      '((current-nick . all)
           (keyword . all)
           (pal . ("#emacs"))
           (query-buffer . all)))

  (defun do-notify (nickname message)
      ;; notification code goes here
  )

  (add-hook 'ercn-notify-hook 'do-notify)

In this example, `ercn-notify-hook' will be called whenever anyone
mentions my nick or a keyword or when sent from a query buffer, or if a pal
speaks in #emacs.

To call the hook on all messages
--------------------------------

  (setq ercn-notify-rules '((message . all))
      ercn-suppress-rules nil)

  (defun do-notify (nickname message)
      ;; notification code goes here
  )

  (add-hook 'ercn-notify-hook 'do-notify)

I wouldn’t recommend it, but it’s your setup.


History

1.0.0 - Initial release.  It probably even works.

1.0.1 - save-excursion, to avoid messing with the current line

1.0.2 - fix autoloads

1.1 - Added customize options; renamed `erc-notify' `erc-notify-hook'