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