#use wml::tmpl::main title="erc -- Emacs IRC Client" PAGE="programming" SUBPAGE="$(WML_SRC_BASENAME)"

<H2>ERC -- The Emacs IRC Client</H2>

<P>
<emacswiki EmacsIrcClient>ERC</emacswiki> is a Emacs extension package which
allows you to connect to multiple different <foldoc IRC> networks
simultaneously and have chat conversations with people on the Internet from
within Emacs, your well known and familiar editing environment.
Each channell and direct conversation (query) resides in a different buffer.
A sophisticated mechanism is used to indicate activity in currently hidden
buffers in the mode-line,
called <emacswiki ErcChannelTracking>Channel Tracking</emacswiki>.

<P>
ERC provides all the features you might expect from a modern
IRC client such as <emacswiki ErcCompletion>nick completion</emacswiki>,
<emacswiki ErcHighlighting>word highlighting</emacswiki> and
<emacswiki ErcNotify>user online status change notifications</emacswiki>.
Text matching specific criteria can be transformed into
<emacswiki ErcButoon>buttons</emacswiki> and 
you can even integrate <emacswiki ErcBbdb>ERC with BBDB</emacswiki>.
ERC also provides <emacswiki ErcNetsplit>Netsplit avoidance</emacswiki> and
rudimentary support for <emacswiki ErcNickserv>Nickserv identification</emacswiki>.
If you are using the GNU Emacs CVS version, ERC also provides
full DCC support including DCC Chat connections and the ability
to send and receive files.
<p>
I came to be the lead developer of ERC in early summer 2001.  Back then it
was apparently abandoned, no development going on any more.
We (<A href="mailto:alex@gnu.org">Alex 'kensanata' Schroeder</A> and I)
decided to check it into <A href="http://sourceforge.net/">SourceForge</A> and
create a <A href="http://www.sourceforge.net/projects/erc/">ERC SourceForge Project</A>.
Since then many different people turned up with patches and interesting ideas,
and I really have to say it was a very interesting and succesfful experience
so far. We have a pretty full-blown feature set already, but useful ideas
and fixes still keep coming in.
<P>
For more information please see the
<emacswiki EmacsIrcClient>ERC homepage</emacswiki> which informs you
on how to download and install ERC.
Or jump right in and <emacswiki ErcBasics>have a look</emacswiki>
at a quickstart guide to using ERC.

<H2><A name="erc-speak">erc-speak</A> -- A speech interface to IRC</H2>
For me, one important aspect of using ERC is its speech capabilities.
When I began to hack on erc, I immediately felt the need for such a thing,
and wrote erc-speak.el, which uses Emacspeak to output speech
to whatever speech synthesizer is configured for use with Emacspeak.
A while ago I recorded a <A href="$(ROOT)/emacs/erc-speak.mp3">sample erc-speak usage session in MP3 format</A>.
erc-speak.el these days behaves a bit differently than illustrated in this
recording, but it should give you a pretty good idea of how it works.
<P>
For more details about erc-sepak.el, see the file itself in the erc distribution.
 
<H2>Sample configuration for ERC</H2>
<P>
This is a small sample snippet of Emacs Lisp which demonstrates a possible
configuration for ERC.  It is approximately what I personally use.

<pre>
;;; ERC
(setq load-path (cons "/home/mlang/erc" load-path))
(load "erc-auto")
(eval-after-load "erc" 
  '(progn
     (setq erc-auto-query t
           erc-bbdb-auto-create-on-whois-p t
	   erc-fill-column (- (window-width) 2)
	   erc-pals '("kensanata" "walters" "shapr" "gordon" "disumu"
		      "johnw" "alfie" "resolve" "mhp" "benj" "ganneff")
	   erc-notify-list erc-pals)
					;    (require 'erc-bbdb)
     (require 'erc-chess)
     (require 'erc-imenu)
     (require 'erc-menu)
     (require 'erc-notify)
     (require 'erc-ring)
     (erc-button-mode 1)
     (erc-completion-mode 1)
     (erc-fill-mode 1)
     (erc-match-mode 1)
     (erc-netsplit-mode 1)
     (erc-services-mode 1)
     (erc-timestamp-mode 1)
     (erc-track-mode 1)
     (add-hook 'erc-mode-hook 'erc-add-scroll-to-bottom)
     (add-to-list 'erc-nick-popup-alist
      '("DebianDB" .
	(shell-command
	 (format
	  "ldapsearch -x -P 2 -h db.debian.org -b dc=debian,dc=org ircnick=%s"
	  nick))))))
</pre>
