1\input texinfo
2@c %**start of header
3@setfilename ../../info/erc.info
4@settitle ERC Manual
5@include docstyle.texi
6@syncodeindex fn cp
7@include emacsver.texi
8@c %**end of header
9
10@copying
11This manual is for ERC as distributed with Emacs @value{EMACSVER}.
12
13Copyright @copyright{} 2005--2021 Free Software Foundation, Inc.
14
15@quotation
16Permission is granted to copy, distribute and/or modify this document
17under the terms of the GNU Free Documentation License, Version 1.3 or
18any later version published by the Free Software Foundation; with no
19Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,''
20and with the Back-Cover Texts as in (a) below.  A copy of the license
21is included in the section entitled ``GNU Free Documentation License''.
22
23(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
24modify this GNU manual.''
25
26All Emacs Lisp code contained in this document may be used, distributed,
27and modified without restriction.
28@end quotation
29@end copying
30
31@dircategory Emacs network features
32@direntry
33* ERC: (erc).                   Powerful and extensible IRC client for Emacs.
34@end direntry
35
36@titlepage
37@title ERC manual
38@subtitle a full-featured IRC client
39@subtitle for Emacs
40
41@c The following two commands
42@c start the copyright page.
43@page
44@vskip 0pt plus 1filll
45@insertcopying
46@end titlepage
47
48@contents
49
50@ifnottex
51@node Top
52@top ERC
53
54@insertcopying
55@end ifnottex
56
57@menu
58* Introduction::                What is ERC?
59* Getting Started::             Quick Start guide to using ERC.
60* Keystroke Summary::           Keystrokes used in ERC buffers.
61* Modules::                     Available modules for ERC.
62* Advanced Usage::              Cool ways of using ERC.
63* Getting Help and Reporting Bugs::
64* History::                     The history of ERC.
65* GNU Free Documentation License::  The license for this documentation.
66* Concept Index::               Search for terms.
67
68@detailmenu
69 --- The Detailed Node Listing ---
70
71Getting Started
72
73* Sample Session::              Example of connecting to the #emacs channel
74* Special Features::            Differences from standalone IRC clients
75
76Advanced Usage
77
78* Connecting::                  Ways of connecting to an IRC server.
79* Sample Configuration::        An example configuration file.
80* Options::                     Options that are available for ERC.
81
82@end detailmenu
83@end menu
84
85@node Introduction
86@chapter Introduction
87
88ERC is a powerful, modular, and extensible IRC client for Emacs.
89It is distributed with Emacs since version 22.1.
90
91It comes with the following capabilities enabled by default.
92
93@itemize @bullet
94@item Flood control
95@item Timestamps
96@item Join channels automatically
97@item Buttonize URLs, nicknames, and other text
98@item Wrap long lines
99@item Highlight or remove IRC control characters
100@item Highlight pals, fools, and other keywords
101@item Detect netsplits
102@item Complete nicknames and commands in a programmable fashion
103@item Make displayed lines read-only
104@item Input history
105@item Track channel activity in the mode-line
106
107@end itemize
108
109
110@node Getting Started
111@chapter Getting Started
112@cindex settings
113
114The command @kbd{M-x erc} will start ERC and prompt for the server to
115connect to.
116
117If you want to place ERC settings in their own file, you can place them
118in @file{~/.emacs.d/.ercrc.el}, creating it if necessary.
119
120If you would rather use the Customize interface to change how ERC
121works, do @kbd{M-x customize-group @key{RET} erc @key{RET}}.  In
122particular, ERC comes with lots of modules that may be enabled or
123disabled; to select which ones you want, do @kbd{M-x
124customize-variable @key{RET} erc-modules @key{RET}}.
125
126@menu
127* Sample Session::              Example of connecting to the #emacs channel
128* Special Features::            Differences from standalone IRC clients
129@end menu
130
131@node Sample Session
132@section Sample Session
133
134This is an example ERC session which shows how to connect to the #emacs
135channel on Freenode.  Another IRC channel on Freenode that may be of
136interest is #erc, which is a channel where ERC users and developers hang
137out.
138
139@itemize @bullet
140
141@item Connect to Freenode
142
143Run @kbd{M-x erc}.  Use ``irc.freenode.net'' as the IRC server, ``6667''
144as the port, and choose a nickname.
145
146@item Get used to the interface
147
148Switch to the ``irc.freenode.net:6667'' buffer, if you're not already
149there.  You will see first some messages about checking for ident, and
150then a bunch of other messages that describe the current IRC server.
151
152@item Join the #emacs channel
153
154In that buffer, type ``/join @key{SPC} #emacs'' and hit @kbd{RET}.  Depending
155on how you've set up ERC, either a new buffer for ``#emacs'' will be
156displayed, or a new buffer called ``#emacs'' will be created in the
157background.  If the latter, switch to the ``#emacs'' buffer.  You will
158see the channel topic and a list of the people who are currently on the
159channel.
160
161@item Register your nickname with Freenode
162
163If you would like to be able to talk with people privately on the
164Freenode network, you will have to ``register'' your nickname.  To do
165so, switch to the ``irc.freenode.net:6667'' buffer and type ``/msg
166NickServ register <password>'', replacing ``<password>'' with your
167desired password.  It should tell you that the operation was successful.
168
169@item Talk to people in the channel
170
171If you switch back to the ``#emacs'' buffer, you can type a message, and
172everyone on the channel will see it.
173
174@item Open a query buffer to talk to someone
175
176If you want to talk with someone in private (this should usually not be
177done for technical help, only for personal questions), type ``/query
178<nick>'', replacing ``<nick>'' with the nickname of the person you would
179like to talk to.  Depending on how ERC is set up, you will either see a
180new buffer with the name of the person, or such a buffer will be created
181in the background and you will have to switch to it.  Begin typing
182messages, and you will be able to have a conversation.
183
184Note that if the other person is not registered, you will not be able to
185talk with them.
186
187@end itemize
188
189@node Special Features
190@section Special Features
191
192ERC has some features that distinguish it from some IRC clients.
193
194@itemize @bullet
195
196@item multiple channels and multiple servers
197
198Every channel is put in a separate buffer.  Several IRC servers may be
199connected to at the same time.
200
201@cindex query buffers
202@item private message separation
203
204Private conversations are treated as channels, and are put into separate
205buffers in Emacs.  We call these ``query buffers''.
206
207@item highlighting
208
209Some occurrences of words can be highlighted, which makes it easier to
210track different kinds of conversations.
211
212@item notification
213
214ERC can notify you that certain users are online.
215
216@item channel tracking
217
218Channels can be hidden and conversation continue in the background.  You
219are notified when something is said in such a channel that is not
220currently visible.  This makes it easy to get Real Work done while still
221maintaining an IRC presence.
222
223@item nick completion
224
225ERC can complete words upon hitting @kbd{TAB}, which eases the writing
226of nicknames in messages.
227
228@cindex history ring
229@item history
230
231Past actions are kept in history rings for future use.  To navigate a
232history ring, hit @kbd{M-p} to go backwards and @kbd{M-n} to go
233forwards.
234
235@item multiple languages
236
237Different channels and servers may have different language encodings.
238
239multiple languages.  Please contact the Emacs developers
240if you are interested in helping with the
241translation effort.
242
243@item user scripting
244
245Users can load scripts (e.g., auto greeting scripts) when ERC starts up.
246
247It is also possible to make custom IRC commands, if you know a little
248Emacs Lisp.  Just make an Emacs Lisp function and call it
249@code{erc-cmd-NEWCOMMAND}, where @code{NEWCOMMAND} is the name of the
250new command in capital letters.
251
252@item auto reconnect
253
254If the connection goes away at some point, ERC will try to reconnect
255automatically.  If it fails to reconnect, and you want to try to
256manually reestablish the connection at some later point, switch to an
257ERC  buffer and run the @code{/RECONNECT} command.
258
259@end itemize
260
261
262@node Keystroke Summary
263@chapter Keys Used in ERC
264@cindex keystrokes
265
266This is a summary of keystrokes available in every ERC buffer.
267
268@table @kbd
269
270@item C-a or <home> (@code{erc-bol})
271Go to beginning of line or end of prompt.
272
273@item @key{RET} (@code{erc-send-current-line})
274Send the current line
275
276@item @key{TAB} (@code{erc-complete-word})
277If at prompt, complete the current word.
278Otherwise, move to the next link or button.
279
280@item M-@key{TAB} (@code{ispell-complete-word})
281Complete the given word, using ispell.
282
283@item C-c C-a (@code{erc-bol})
284Go to beginning of line or end of prompt.
285
286@item C-c C-b (@code{erc-switch-to-buffer})
287Use @code{read-buffer} to prompt for a ERC buffer to switch to.
288
289@item C-c C-c (@code{erc-toggle-interpret-controls})
290Toggle interpretation of control sequences in messages.
291
292@item C-c C-d (@code{erc-input-action})
293Interactively input a user action and send it to IRC.
294
295@item C-c C-e (@code{erc-toggle-ctcp-autoresponse})
296Toggle automatic CTCP replies (like VERSION and PING).
297
298@item C-c C-f (@code{erc-toggle-flood-control})
299Toggle use of flood control on sent messages.
300
301@item C-c @key{TAB} (@code{erc-invite-only-mode})
302Turn on the invite only mode (+i) for the current channel.
303
304@item C-c C-j (@code{erc-join-channel})
305Join channel.  If point is at the beginning of a channel name, use that
306as default.
307
308@item C-c C-k (@code{erc-go-to-log-matches-buffer})
309Interactively open an erc-log-matches buffer
310
311@item C-c C-l (@code{erc-save-buffer-in-logs})
312Append buffer contents to the log file, if logging is enabled.
313
314@item C-c C-n (@code{erc-channel-names})
315Run "/names #channel" in the current channel.
316
317@item C-c C-o (@code{erc-get-channel-mode-from-keypress})
318Read a key sequence and call the corresponding channel mode function.
319After doing @kbd{C-c C-o}, type in a channel mode letter.
320
321@kbd{C-g} means quit.
322@kbd{RET} lets you type more than one mode at a time.
323If @kbd{l} is pressed, @code{erc-set-channel-limit} gets called.
324If @kbd{k} is pressed, @code{erc-set-channel-key} gets called.
325Anything else will be sent to @code{erc-toggle-channel-mode}.
326
327@item C-c C-p (@code{erc-part-from-channel})
328Part from the current channel and prompt for a reason.
329
330@item C-c C-q (@code{erc-quit-server})
331Disconnect from current server after prompting for reason.
332
333@item C-c C-r (@code{erc-remove-text-properties-region})
334Clears the region (start,end) in object from all colors, etc.
335
336@item C-c C-t (@code{erc-set-topic})
337Prompt for a topic for the current channel.
338
339@item C-c C-u (@code{erc-kill-input})
340Kill current input line using @code{erc-bol} followed by @code{kill-line}.
341
342@end table
343
344
345@node Modules
346@chapter Modules
347@cindex modules
348
349One way to add functionality to ERC is to customize which of its many
350modules are loaded.
351
352There is a spiffy customize interface, which may be reached by typing
353@kbd{M-x customize-option @key{RET} erc-modules @key{RET}}.
354Alternatively, set @code{erc-modules} manually and then call
355@code{erc-update-modules}.
356
357The following is a list of available modules.
358
359@table @code
360
361@cindex modules, autoaway
362@item autoaway
363Set away status automatically
364
365@cindex modules, autojoin
366@item autojoin
367Join channels automatically
368
369@cindex modules, bbdb
370@item bbdb
371Integrate with the Big Brother Database
372
373@cindex modules, button
374@item button
375Buttonize URLs, nicknames, and other text
376
377@cindex modules, capab-identify
378@item capab-identify
379Mark unidentified users on freenode and other servers supporting CAPAB.
380
381@cindex modules, completion
382@cindex modules, pcomplete
383@item completion (aka pcomplete)
384Complete nicknames and commands (programmable)
385
386@cindex modules, fill
387@item fill
388Wrap long lines
389
390@cindex modules, identd
391@item identd
392Launch an identd server on port 8113
393
394@cindex modules, irccontrols
395@item irccontrols
396Highlight or remove IRC control characters
397
398@cindex modules, log
399@item log
400Save buffers in logs
401
402@cindex modules, match
403@item match
404Highlight pals, fools, and other keywords
405
406@cindex modules, menu
407@item menu
408Display a menu in ERC buffers
409
410@cindex modules, netsplit
411@item netsplit
412Detect netsplits
413
414@cindex modules, noncommands
415@item noncommands
416Don't display non-IRC commands after evaluation
417
418@cindex modules, notify
419@item notify
420Notify when the online status of certain users changes
421
422@cindex modules, notifications
423@item notifications
424Send you a notification when you get a private message,
425or your nickname is mentioned
426
427@cindex modules, page
428@item page
429Process CTCP PAGE requests from IRC
430
431@cindex modules, readonly
432@item readonly
433Make displayed lines read-only
434
435@cindex modules, replace
436@item replace
437Replace text in messages
438
439@cindex modules, ring
440@item ring
441Enable an input history
442
443@cindex modules, scrolltobottom
444@item scrolltobottom
445Scroll to the bottom of the buffer
446
447@cindex modules, services
448@item services
449Identify to Nickserv (IRC Services) automatically
450
451@cindex modules, smiley
452@item smiley
453Convert smileys to pretty icons
454
455@cindex modules, sound
456@item sound
457Play sounds when you receive CTCP SOUND requests
458
459@cindex modules, spelling
460@item spelling
461Check spelling of messages
462
463@cindex modules, stamp
464@item stamp
465Add timestamps to messages
466
467@cindex modules, track
468@item track
469Track channel activity in the mode-line
470
471@cindex modules, truncate
472@item truncate
473Truncate buffers to a certain size
474
475@cindex modules, unmorse
476@item unmorse
477Translate morse code in messages
478
479@end table
480
481@c PRE5_4: Document every option of every module in its own subnode
482
483
484@node Advanced Usage
485@chapter Advanced Usage
486@cindex advanced topics
487
488@menu
489* Connecting::                  Ways of connecting to an IRC server.
490* Sample Configuration::        An example configuration file.
491* Options::                     Options that are available for ERC.
492@end menu
493
494@node Connecting
495@section Connecting to an IRC Server
496@cindex connecting
497
498The easiest way to connect to an IRC server is to call @kbd{M-x erc}.
499If you want to assign this function to a keystroke, the following will
500help you figure out its parameters.
501
502@defun erc
503Select connection parameters and run ERC@.
504Non-interactively, it takes the following keyword arguments.
505
506@itemize @bullet
507@item @var{server}
508@item @var{port}
509@item @var{nick}
510@item @var{password}
511@item @var{full-name}
512@end itemize
513
514That is, if called with the following arguments, @var{server} and
515@var{full-name} will be set to those values, whereas
516@code{erc-compute-port}, @code{erc-compute-nick} and
517@code{erc-compute-full-name} will be invoked for the values of the other
518parameters.
519
520@example
521(erc :server "irc.freenode.net" :full-name "Harry S Truman")
522@end example
523@end defun
524
525@subheading Server
526
527@defun erc-compute-server &optional server
528Return an IRC server name.
529
530This tries a number of increasingly more default methods until a non-@code{nil}
531value is found.
532
533@itemize @bullet
534@item @var{server} (the argument passed to this function)
535@item The @code{erc-server} option
536@item The value of the IRCSERVER environment variable
537@item The @code{erc-default-server} variable
538@end itemize
539
540@end defun
541
542@defopt erc-server
543IRC server to use if one is not provided.
544@end defopt
545
546@subheading Port
547
548@defun erc-compute-port &optional port
549Return a port for an IRC server.
550
551This tries a number of increasingly more default methods until a non-@code{nil}
552value is found.
553
554@itemize @bullet
555@item @var{port} (the argument passed to this function)
556@item The @code{erc-port} option
557@item The @code{erc-default-port} variable
558@end itemize
559
560@end defun
561
562@defopt erc-port
563IRC port to use if not specified.
564
565This can be either a string or a number.
566@end defopt
567
568@subheading Nick
569
570@defun erc-compute-nick &optional nick
571Return user's IRC nick.
572
573This tries a number of increasingly more default methods until a
574non-@code{nil} value is found.
575
576@itemize
577@item @var{nick} (the argument passed to this function)
578@item The @code{erc-nick} option
579@item The value of the IRCNICK environment variable
580@item The result from the @code{user-login-name} function
581@end itemize
582
583@end defun
584
585@defopt erc-nick
586Nickname to use if one is not provided.
587
588This can be either a string, or a list of strings.
589In the latter case, if the first nick in the list is already in use,
590other nicks are tried in the list order.
591@end defopt
592
593@defopt erc-format-nick-function
594A function to format a nickname for message display
595
596You can set this to @code{erc-format-@@nick} to display user mode prefix
597@end defopt
598
599@example
600(setq erc-format-nick-function 'erc-format-@@nick)
601@end example
602
603@defopt erc-nick-uniquifier
604The string to append to the nick if it is already in use.
605@end defopt
606
607@defopt erc-try-new-nick-p
608If the nickname you chose isn't available, and this option is non-@code{nil},
609ERC should automatically attempt to connect with another nickname.
610
611You can manually set another nickname with the /NICK command.
612@end defopt
613
614@subheading Password
615@cindex password
616
617@defopt erc-prompt-for-password
618If non-@code{nil} (the default), @kbd{M-x erc} prompts for a password.
619@end defopt
620
621If you prefer, you can set this option to @code{nil} and use the
622@code{auth-source} mechanism to store your password.  For instance, if
623you use @file{~/.authinfo} as your auth-source backend, then put
624something like the following in that file:
625
626@example
627machine irc.example.net login "#fsf" password sEcReT
628@end example
629
630@noindent
631ERC also consults @code{auth-source} to find any channel keys required
632for the channels that you wish to autojoin, as specified by the
633variable @code{erc-autojoin-channels-alist}.
634
635For more details, @pxref{Top,,auth-source, auth, Emacs auth-source Library}.
636
637
638@subheading Full name
639
640@defun erc-compute-full-name &optional full-name
641Return user's full name.
642
643This tries a number of increasingly more default methods until a
644non-@code{nil} value is found.
645
646@itemize @bullet
647@item @var{full-name} (the argument passed to this function)
648@item The @code{erc-user-full-name} option
649@item The value of the IRCNAME environment variable
650@item The result from the @code{user-full-name} function
651@end itemize
652
653@end defun
654
655@defopt erc-user-full-name
656User full name.
657
658This can be either a string or a function to call.
659@end defopt
660
661@node Sample Configuration
662@section Sample Configuration
663@cindex configuration, sample
664
665Here is an example of configuration settings for ERC@.  This can go into
666your Emacs configuration file.  Everything after the @code{(require
667'erc)} command can optionally go into @file{~/.emacs.d/.ercrc.el}.
668
669@lisp
670;;; Sample ERC configuration
671
672;; Load authentication info from an external source.  Put sensitive
673;; passwords and the like in here.
674(load "~/.emacs.d/.erc-auth")
675
676;; This is an example of how to make a new command.  Type "/uptime" to
677;; use it.
678(defun erc-cmd-UPTIME (&rest ignore)
679  "Display the uptime of the system, as well as some load-related
680stuff, to the current ERC buffer."
681  (let ((uname-output
682         (replace-regexp-in-string
683          ", load average: " "] @{Load average@} ["
684          ;; Collapse spaces, remove
685          (replace-regexp-in-string
686           " +" " "
687           ;; Remove beginning and trailing whitespace
688           (replace-regexp-in-string
689            "^ +\\|[ \n]+$" ""
690            (shell-command-to-string "uptime"))))))
691    (erc-send-message
692     (concat "@{Uptime@} [" uname-output "]"))))
693
694;; This causes ERC to connect to the Freenode network upon hitting
695;; C-c e f.  Replace MYNICK with your IRC nick.
696(global-set-key "\C-cef" (lambda () (interactive)
697                           (erc :server "irc.freenode.net" :port "6667"
698                                :nick "MYNICK")))
699
700;; This causes ERC to connect to the IRC server on your own machine (if
701;; you have one) upon hitting C-c e b.  Replace MYNICK with your IRC
702;; nick.  Often, people like to run bitlbee (https://bitlbee.org/) as an
703;; AIM/Jabber/MSN to IRC gateway, so that they can use ERC to chat with
704;; people on those networks.
705(global-set-key "\C-ceb" (lambda () (interactive)
706                           (erc :server "localhost" :port "6667"
707                                :nick "MYNICK")))
708
709;; Make C-c RET (or C-c C-RET) send messages instead of RET.  This has
710;; been commented out to avoid confusing new users.
711;; (define-key erc-mode-map (kbd "RET") nil)
712;; (define-key erc-mode-map (kbd "C-c RET") 'erc-send-current-line)
713;; (define-key erc-mode-map (kbd "C-c C-RET") 'erc-send-current-line)
714
715;;; Options
716
717;; Join the #emacs and #erc channels whenever connecting to Freenode.
718(setq erc-autojoin-channels-alist '(("freenode.net" "#emacs" "#erc")))
719
720;; Rename server buffers to reflect the current network name instead
721;; of SERVER:PORT (e.g., "freenode" instead of "irc.freenode.net:6667").
722;; This is useful when using a bouncer like ZNC where you have multiple
723;; connections to the same server.
724(setq erc-rename-buffers t)
725
726;; Interpret mIRC-style color commands in IRC chats
727(setq erc-interpret-mirc-color t)
728
729;; The following are commented out by default, but users of other
730;; non-Emacs IRC clients might find them useful.
731;; Kill buffers for channels after /part
732;; (setq erc-kill-buffer-on-part t)
733;; Kill buffers for private queries after quitting the server
734;; (setq erc-kill-queries-on-quit t)
735;; Kill buffers for server messages after quitting the server
736;; (setq erc-kill-server-buffer-on-quit t)
737@end lisp
738
739@node Options
740@section Options
741@cindex options
742
743@c PRE5_4: (Node) Document every ERC option (module options go in
744@c previous chapter)
745
746This section is extremely incomplete.  For now, the easiest way to
747check out all the available options for ERC is to do
748@kbd{M-x customize-group @key{RET} erc @key{RET}}.
749
750@defopt erc-hide-list
751If non, @code{nil}, this is a list of IRC message types to hide, e.g.:
752
753@example
754(setq erc-hide-list '("JOIN" "PART" "QUIT"))
755@end example
756@end defopt
757
758@defopt erc-network-hide-list
759If non, @code{nil}, this is a list of IRC networks and message types
760to hide, e.g.:
761
762@example
763(setq erc-network-hide-list (("freenode" "JOIN" "PART" "QUIT")
764("OFTC" "JOIN" "PART""))
765@end example
766@end defopt
767
768@defopt erc-channel-hide-list
769If non, @code{nil}, this is a list of IRC channels and message types
770to hide, e.g.:
771
772@example
773(setq erc-channel-hide-list (("#erc" "JOIN" "PART" "QUIT")
774("#emacs" "NICK"))
775@end example
776@end defopt
777
778@defopt erc-lurker-hide-list
779Like @code{erc-hide-list}, but only applies to messages sent by
780lurkers.  The function @code{erc-lurker-p} determines whether a given
781nickname is considered a lurker.
782@end defopt
783
784@defopt erc-rename-buffers
785If non, @code{nil}, this will rename server buffers to reflect the
786current network name instead of IP:PORT
787
788@example
789(setq erc-rename-buffers t)
790@end example
791@end defopt
792
793@node Getting Help and Reporting Bugs
794@chapter Getting Help and Reporting Bugs
795@cindex help, getting
796@cindex bugs, reporting
797
798After you have read this guide, if you still have questions about ERC,
799or if you have bugs to report, there are several places you can go.
800
801@itemize @bullet
802
803@item
804@uref{https://www.emacswiki.org/emacs/ERC} is the
805emacswiki.org page for ERC@.  Anyone may add tips, hints, etc.@: to it.
806
807@item
808You can ask questions about using ERC on the Emacs mailing list,
809@uref{https://lists.gnu.org/mailman/listinfo/help-gnu-emacs}.
810
811@item
812You can visit the IRC Freenode channel @samp{#emacs}. Many of the
813contributors are frequently around and willing to answer your
814questions.
815
816@item
817To report a bug in ERC, use @kbd{M-x report-emacs-bug}.
818
819@end itemize
820
821
822@node History
823@chapter History
824@cindex history, of ERC
825
826@c abel@@bfr.co.il, sergey.berezin@@cs.cmu.edu
827ERC was originally written by Alexander L. Belikoff and Sergey Berezin.
828They stopped development around
829December 1999.  Their last released version was ERC 2.0.
830
831P.S.: If one of the original developers of ERC reads this, we'd like to
832receive additional information for this file and hear comments in
833general.
834
835@itemize
836@item 2001
837
838@c mlang@@delysid.org, alex@@gnu.org
839In June 2001, Mario Lang and Alex Schroeder
840took over development and created a ERC Project at
841@uref{https://sourceforge.net/projects/erc}.
842
843In reaction to a mail about the new ERC development effort, Sergey
844Berezin said, ``First of all, I'm glad that my version of ERC is being
845used out there.  The thing is, I do not have free time and enough
846incentive anymore to work on ERC, so I would be happy if you guys take
847over the project entirely.''
848
849So we happily hacked away on ERC, and soon after (September 2001)
850released the next "stable" version, 2.1.
851
852Most of the development of the new ERC happened on #emacs on
853irc.openprojects.net.  Over time, many people contributed code, ideas,
854bugfixes, and a lot of alpha/beta/gamma testing.
855
856See the @file{CREDITS} file for a list of contributors.
857
858@item 2003
859
860ERC 3.0 was released.
861
862@item 2004
863
864ERC 4.0 was released.
865
866@item 2005
867
868@c mwolson@@gnu.org
869ERC 5.0 was released.  Michael Olson became
870the release manager and eventually the maintainer.
871
872After some discussion between him and the Emacs developers, it was
873decided to include ERC in Emacs.
874
875@item 2006
876
877ERC 5.1 was released.  It was subsequently included in Emacs 22.
878
879ERC became an official GNU project, and development moved to
880@uref{https://sv.gnu.org/projects/erc}.  We switched to using GNU Arch as
881our revision control system.  Our mailing list address changed as well.
882
883@item 2007
884
885We switched to using git for our version control system.
886
887@item 2009+
888
889Since about 2009, ERC is no longer developed as a separate project, but
890is maintained as part of Emacs.
891
892@end itemize
893
894@node GNU Free Documentation License
895@appendix GNU Free Documentation License
896@include doclicense.texi
897
898@node Concept Index
899@unnumbered Index
900
901@printindex cp
902
903@bye
904