Release ERC 5.2.
authorMiles Bader <miles@gnu.org>
Sun, 1 Apr 2007 13:36:38 +0000 (13:36 +0000)
committerMiles Bader <miles@gnu.org>
Sun, 1 Apr 2007 13:36:38 +0000 (13:36 +0000)
I have updated the version of ERC to 5.2, since it fixes a bug with C-c
C-SPC being bound globally by default.  For the full list of changes in
this version, see etc/ERC-NEWS.

Revision: emacs@sv.gnu.org/emacs--devo--0--patch-687
Creator:  Michael Olson <mwolson@gnu.org>

28 files changed:
etc/ChangeLog
etc/ERC-NEWS
lisp/erc/ChangeLog
lisp/erc/ChangeLog.06 [copied from lisp/erc/ChangeLog with 85% similarity]
lisp/erc/erc-autoaway.el
lisp/erc/erc-backend.el
lisp/erc/erc-button.el
lisp/erc/erc-capab.el
lisp/erc/erc-compat.el
lisp/erc/erc-fill.el
lisp/erc/erc-ibuffer.el
lisp/erc/erc-identd.el
lisp/erc/erc-log.el
lisp/erc/erc-match.el
lisp/erc/erc-menu.el
lisp/erc/erc-netsplit.el
lisp/erc/erc-networks.el
lisp/erc/erc-notify.el
lisp/erc/erc-pcomplete.el
lisp/erc/erc-ring.el
lisp/erc/erc-services.el
lisp/erc/erc-speedbar.el
lisp/erc/erc-spelling.el
lisp/erc/erc-stamp.el
lisp/erc/erc-track.el
lisp/erc/erc.el
man/ChangeLog
man/erc.texi

index b31384e..4b9f3e0 100644 (file)
@@ -1,3 +1,8 @@
+2007-04-01  Michael Olson  <mwolson@gnu.org>
+
+       * ERC-NEWS: Update for the ERC 5.2 release.  Most of these entries
+       were for previously-committed changes.
+
 2007-03-31  Michael Albinus  <michael.albinus@gmx.de>
 
        * PROBLEMS: Remove Tramp problem; it has been fixed.
index dd5c113..e7b0dcb 100644 (file)
@@ -3,8 +3,7 @@ ERC NEWS                                                       -*- outline -*-
 Copyright (C) 2006, 2007  Free Software Foundation, Inc.
 See the end of the file for license conditions.
 
-
-* Changes in ERC 5.2 (stable pre-release for Emacs 22)
+* Changes in ERC 5.2
 
 ** M-x erc RET now starts ERC.
 `erc-select' has been changed to `erc'.  `erc-select' still remains as
@@ -12,37 +11,173 @@ an alias of `erc'. Likewise, `erc-select-ssl' has been renamed to
 `erc-ssl' with `erc-select-ssl' as its alias.  The function that was
 known as `erc' is now `erc-open'.
 
+** Open query buffers by default when private messages are received.
+The default value of `erc-auto-query' has been changed to 'bury.
+
 ** New command: /RECONNECT
 This command tries to reconnect to the current IRC server exactly
 once.  It does not work in server buffers (throws an error before the
 command is run), but works in query and channel buffers.
 
+** In MS-DOS environments, look for _ercrc.el rather than .ercrc.el.
+
+** Fix buggy interaction with multi-tty Emacs.
+
+** After running /QUIT, make sure that the IRC process is killed within
+4 seconds.  Freenode, in particular, needs this at times.
+
+** If the IRC process has not responded to our PINGs within a certain
+time, kill it and restart the connection.  See
+`erc-server-auto-reconnect', `erc-server-reconnect-attempts',
+`erc-server-reconnect-timeout', `erc-server-send-ping-interval', and
+`erc-server-send-ping-timeout' to fine-tune ERC's behavior.
+
+** Avoid getting into an infinite connection loop.
+Previously, this could happen if your nick was banned, you were using
+Tor, incorrect information was entered, or the connection was bad.
+
+** Make ban messages less confusing.
+
+** Restore the point correctly when reconnecting to an IRC server.
+
+** Make /IGNORE and /UNIGNORE prompt to determine whether their
+argument is a user or a regexp.  This results in less-confusing
+behavior when trying to ignore someone who has a bracket in their
+nick.
+
+** Make the default port "6667" rather than "ircd", because some
+operating systems don't know what port "ircd" maps to.
+
+** Fix several bugs in erc-iswitchb (C-c C-b).
+
+** Clean up internal documentation.
+Special thanks go to Juanma Barranquero for the thorough vetting of
+ERC's internal documentation.
+
+** Display a more informative message when a module is not found.
+
+** Fix a bug where paths were being colored like IRC commands.
+
+** In the customize interface for `erc-modules', add the name of the module.
+This makes it easier to find modules by name.
+
+** erc-server-send-ping-interval: Change to use a default of 30 seconds.
+
+** Some files which are included with the release of ERC 5.2 will not
+appear in the version of ERC that is bundled with Emacs 22.  These
+extras files may be found at:
+
+ o http://ftp.gnu.org/gnu/erc/erc-5.2-extras.tar.gz, or
+ o http://ftp.gnu.org/gnu/erc/erc-5.2-extras.zip.
+
+** Renamed files
+
+Several files were renamed so as to make them distinct to users of the
+MS-DOS operating system.
+
+ o erc-autojoin.el -> erc-join.el
+ o erc-complete.el -> erc-hecomplete.el
+ o erc-nickserv.el -> erc-services.el
+ o ChangeLog.NNNN -> ChangeLog.NN
+
+** Header line changes
+
+*** Remove "[IRC]" from the header line.
+
+*** Add the %l format character to `erc-header-line-format',
+
+*** Document how to remove the header line.
+Namely: (setq erc-header-line-format nil).
+
 ** New options
 
 *** erc-server-reconnect-attempts: Determines the number of
 reconnection attempts that ERC will make per server.
 
-*** erc-server-reconnect-timeout: New option that determines the
-amount of time, in seconds, that ERC will wait between successive
-reconnect attempts.
+*** erc-server-reconnect-timeout: Determines the amount of time,
+in seconds, that ERC will wait between successive reconnect attempts.
+
+*** erc-server-send-ping-timeout: Determines when to consider a connection
+stalled and restart it.  The default is        after 120 seconds.
+
+*** erc-system-name: Determines the system name to use when logging in.
+The default is to figure this out by calling `system-name'.
 
 ** New face: `erc-my-nick-face'
 This helps make it easier to distinguish messages sent by yourself
 from messages sent by other users when the value of the variable
 `erc-show-my-nick' is non-nil.
 
+** Namespace changes
+
+*** New macro: `erc-with-server-buffer'
+Switches to the current ERC server buffer and runs some code.  If no
+server buffer is available, return nil.  This is a useful way to
+access variables in the server buffer.
+
+*** New function: `erc-open-server-buffer-p'
+Returns non-nil if the given buffer is an ERC server buffer that has
+an open IRC process.
+
+*** New function: `erc-format-lag-time'
+Returns the estimated lag time to server, `erc-server-lag'.
+
+*** Renamed items
+
+ o `erc-server-setup-periodical-server-ping' is now
+   `erc-server-setup-periodical-ping'
+
+ o `erc-away-p' is now `erc-away-time'
+
+** Changes to the ERC manual
+
+*** New section: Sample Session.
+Describes a sample ERC session for connecting to the #emacs channel on
+Freenode.  Also mention the #erc channel.
+
+*** New section: Special Features.
+Describes some of the special features of ERC.
+
+*** Getting Started: Mention ~/.emacs.d/.ercrc.el and the Customize
+interface.
+
+*** Development: Mention ErcDevelopment page on emacswiki.org.
+
+*** Tips and Tricks: Remove empty section for now.
+
+*** Options: Mention how to see available ERC options.
+
+*** Sample Configuration: Add an example of how to configure ERC.
+
 ** New modules
 
+*** Autoaway (erc-autoaway.el)
+
+**** Make this much more reliable.
+
+**** Avoid duplicate messages when coming back from being away.
+
+**** Fix bug where autoaway was enabled just by loading the file.
+
+*** BBDB (erc-bbdb.el)
+
+**** Display information on how to cancel merging of info or how to
+create a new John Doe record.
+
+**** Make it so that information from /whois continues to come in, even
+while prompting for a record to merge.
+
+**** Make hitting C-g correctly abort merging the record.
+
 *** Capab identify (erc-capab.el)
 Mark users who haven't identified to NickServ on servers supporting
 CAPAB IDENTIFY-MSG.
 
 ** Changes and additions to modules
 
-*** Channel lists (erc-list.el)
+*** Button (erc-button.el)
 
-**** This has been removed from Emacs 22, since a major contributor
-to it has not yet assigned changes.
+**** Make <backtab> go to the previous button.
 
 *** Channel tracking (erc-track.el)
 
@@ -50,6 +185,103 @@ to it has not yet assigned changes.
 This helps people using a mouse know that they are buttons and can be
 clicked on.
 
+**** Fix issue where C-c C-SPC could conflict with user-defined keybindings.
+This is accomplished by moving these bindings to their own global
+minor mode.  Now the default is to check whether the user has bound
+something to C-c C-SPC or C-c C-@.  If they have, prompt them about
+whether to really override that binding.  This also has the effect of
+preventing ERC from clobbering rcirc's keybinding, unless this is
+desired.  See `erc-track-enable-keybindings' for more details.
+
+**** New option: erc-track-enable-keybindings.
+Determine whether or not to enable the C-c C-SPC and C-c C-@
+keybindings.  The default is to ask whether to do this if a binding to
+these keys already exists.  It can also be set to t or nil to always
+bind or never bind, respectively.
+
+**** Remove `track-when-inactive' module.
+See `erc-track-when-inactive' for further details.
+
+**** New option: erc-track-when-inactive.
+This option replaces the track-when-inactive module.  Set it to
+non-nil to track activity even in visible buffers when inactive.  The
+default is nil.
+
+**** Remove the `track-modified-channels' alias for the `track' module.
+
+*** DCC support (erc-dcc.el)
+
+**** Add Usage section to Commentary.
+
+**** Fix a bug in the server message output.
+
+*** Filling (erc-fill.el)
+
+**** Fix bug involving messages that start with one or more blank lines.
+
+*** Identd (erc-identd.el)
+
+**** New option `erc-identd-port'
+Specifies the port to use if none is given as an argument to
+`erc-identd-start'.  This is placed in the new customization group
+`erc-identd'.
+
+**** New function: `erc-identd-quickstart'
+Ignores any arguments and calls `erc-identd-start'.
+
+*** Channel lists (erc-list.el)
+
+**** Enable by default, except in the version of ERC bundled with Emacs 22.
+
+*** Logging (erc-log.el)
+
+**** Make sure filenames are safe to use before writing to them.
+
+**** Save all log buffers when exiting Emacs.
+
+**** erc-generate-log-file-name-function: Add option for
+`erc-generate-log-file-name-network', which is a new function that
+uses the network name rather than the server name when possible.
+
+*** Menu (erc-menu.el)
+
+**** Name the menu "ERC" instead of "IRC" to avoid confusion with rcirc
+and other clients.
+
+**** Make this into a proper module and load it by default.
+
+**** Add "Current channel" submenu.
+
+*** Networks (erc-networks.el)
+
+**** Add support for Ars OpenIRC, LinuxChix, and OFTC networks.
+
+**** Escape periods in Konfido.Net and Kewl.Org.
+
+*** Internet services / Nickserv (erc-nickserv.el)
+
+**** Add new 'both method for the `erc-nickserv-identify-mode' option
+and make it the default.  This tries to do the right thing both when a
+known nickserv message exists for an IRC network, and when it does
+not.
+
+**** Support nickserv authentication on OFTC, Azzurra, Ars, and QuakeNet.
+
+**** Support authentication on BitlBee.
+
+**** Make source code easier to understand by using accessor functions.
+
+*** Sound support (erc-sound.el)
+
+**** Make this work with both Emacs 21 and Emacs 22.
+
+*** Timestamps (erc-stamp.el)
+
+**** Exclude the newline from the erc-timestamp field.
+
+**** New function: `erc-toggle-timestamps'.
+Toggles display of timestamps.
+
 * Changes in ERC 5.1.4
 
 ** Make find-function and find-variable work in Emacs 22 for
@@ -156,6 +388,10 @@ to make the BBDB buffer electric.  This defaults to not electric.
 
 **** Don't create an extra buffer for the identd process.
 
+*** Channel lists (erc-list.el)
+
+**** Enable by default, except in the version of ERC bundled with Emacs 22.
+
 *** Logging (erc-log.el)
 
 **** By default, don't insert old logs when opening an ERC buffer.
dissimilarity index 91%
index 62e7eaa..70ffa4e 100644 (file)
-2007-01-13  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-command-regexp): New variable that is used to match
-       a command.
-       (erc-send-input): Use it.  This fixes a bug where paths --
-       "/usr/bin/foo", for example -- were being displayed as commands,
-       but still sent correctly.
-       (erc-extract-command-from-line): Use it.
-
-       * erc.texi (Modules): Document erc-capab-identify.
-
-2007-01-11  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc.el (erc-find-parsed-property): Moved here from erc-track.el
-       since it can be useful in general.
-
-       * erc-track.el (erc-find-parsed-property): Removed.
-
-       * erc-capab.el (erc-capab-find-parsed): Removed.
-       (erc-capab-identify-add-prefix): Use `erc-find-parsed-property'.
-
-       * erc.el (erc-open): Run `erc-before-connect' hook here.  This
-       makes sure the hook always gets called before a connection is
-       made, as some functions, like `erc-handle-irc-url', use `erc-open'
-       instead of `erc'.
-       (erc): Removed `erc-before-connect' hook.
-
-       * erc-menu.el (erc-menu-definition): Put items specific to
-       channels in a "Current channel" submenu.
-
-       * erc-backend.el (321, 323): Display channel list in server buffer
-       when not using the channel list module.
-
-       * erc.el: Updated copyright years.
-       (erc-version-string): Set to 5.2 (devel).
-       (erc-format-lag-time): Fixed to work when `erc-server-lag' is nil.
-       (erc-update-mode-line-buffer): Set the header face.
-
-2007-01-11  Michael Olson  <mwolson@gnu.org>
-
-       * erc-bbdb.el (erc-bbdb-popup-type): Fix customization type and
-       documentation.
-
-       * erc-services.el (erc-nickserv-identify-mode): Improve
-       documentation for nick-change option and move higher to fix
-       compiler warning.  Avoid a recursive load error.
-       (erc-nickserv-alist): Add simple entry for BitlBee, to avoid
-       "NickServ is AWAY: User is offline" error.  Oddly enough, bitlbee
-       was smart enough to recognize that as an authentication request
-       and log in regardless, which is why I didn't notice this earlier.
-       (erc-nickserv-alist-sender, erc-nickserv-alist-regexp)
-       (erc-nickserv-alist-nickserv, erc-nickserv-alist-ident-keyword)
-       (erc-nickserv-alist-use-nick-p)
-       (erc-nickserv-alist-ident-command): New accessors for
-       erc-nickserv-alist.  Using nth is unwieldy.
-       (erc-nickserv-identify-autodetect)
-       (erc-nickserv-identify-on-connect)
-       (erc-nickserv-identify-on-nick-change, erc-nickserv-identify): Use
-       the new accessors.
-
-2007-01-11  Diane Murray  <disumu@x3y2z1.net>
-
-       * NEWS: Added note for `erc-my-nick-face'.  Fixed capab-identify
-       wording.
-
-2007-01-10  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc.el (erc-mode-line-format): Added %l to documentation.
-       (erc-header-line-format): Removed "[IRC]".  Use the new %l
-       replacement character.  Doc fix.
-       (erc-format-channel-modes): Removed lag code.  Removed parentheses
-       from mode string.
-       (erc-format-lag-time): New function.
-       (erc-update-mode-line-buffer): Use it.
-
-2007-01-09  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-system-name): New option that determines the system
-       name to use when logging in.  The default is to figure this out by
-       calling `system-name'.
-       (erc-login): Use it.
-
-2007-01-07  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-modules): Add the menu module.  This should fix a
-       bug with incorrect ERC submenus being displayed.
-
-       * erc-menu.el: Turn this into a module.
-       (erc-menu-add, erc-menu-remove): New functions that add and remove
-       the ERC menu.
-
-2006-12-28  Michael Olson  <mwolson@gnu.org>
-
-       * erc-list.el: Change header to mention that this is part of ERC,
-       rather than GNU Emacs.
-
-       * erc-networks.el (erc-server-alist): Add Ars OpenIRC and
-       LinuxChix networks.  Thanks to Angelina Carlton for mentioning
-       them.  Properly escape periods in Konfido.Net and Kewl.Org.
-       (erc-networks-alist): Add entries for Ars and LinuxChix, though
-       the latter does not actually provide an announced network name.
-
-       * erc-services.el (erc-nickserv-identify-mode): Add 'both method,
-       which waits for a NickServ message if the network supports it,
-       otherwise sends the password after connecting.
-       (erc-nickserv-identify-mode): Default to 'both.
-       (erc-nickserv-passwords): Add OFTC and Azzurra to custom options.
-       (erc-nickserv-alist): Indentation fix.
-       (erc-nickserv-identify-on-connect)
-       (erc-nickserv-identify-on-nick-change): Handle 'both method.
-
-2006-12-28  Leo  <sdl.web@gmail.com>  (tiny change)
-
-       * erc.el (erc-iswitchb): Wrap body in unwind-protect so that
-       hitting C-g does not leave iswitchb-mode on.
-
-2006-12-27  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-cmd-RECONNECT): New command that calls
-       erc-server-reconnect.
-
-       * erc-backend.el (erc-server-reconnect-count): New server variable
-       that keeps track of reconnection attempts.
-       (erc-server-reconnect-attempts): New option that determines the
-       number of reconnection attempts that ERC will make per server.
-       (erc-server-reconnect-timeout): New option that determines the
-       amount of time, in seconds, that ERC will wait between successive
-       reconnect attempts.
-       (erc-server-reconnect): New function that reestablishes the
-       current IRC connection.  Move some commands from
-       erc-process-sentinel-1 here.
-       (erc-process-sentinel-1): If we have been disconnected, loop until
-       we either reconnect or run out of attempts.
-       (erc-server-reconnect-p): Move higher and make this a defsubst,
-       since I'm worried about the current buffer changing from
-       underneath us.  Implement limit of number of reconnect attempts..
-
-       * erc.texi (Getting Started): Update for /RECONNECT command.
-
-2006-12-26  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-open): Restore old point correctly, or at least get
-       closer to doing so than before.
-
-2006-12-13  Leo  <sdl.web@gmail.com>  (tiny change)
-
-       * erc.el (erc-iswitchb): Temporarily enable iswitchb mode if it
-       isn't active already, instead of leaving it on.
-
-2006-12-10  Juanma Barranquero  <lekktu@gmail.com>
-
-       * erc-ezbounce.el (erc-ezb-init-session-list): Doc fix.
-
-2006-12-08  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el: Re-evaluate contributions from a contributor, and found
-       them under 15 lines of non-obvious code, so it is safe to remove
-       the copyright notice.
-       (erc-modules): Remove list module.
-
-       * erc-list.el: Remove, since a contributor who has not completed
-       their assignment has contributed significantly more than 15 lines
-       of code to this file.
-
-2006-11-28  Juanma Barranquero  <lekktu@gmail.com>
-
-       * erc.el (erc-cmd-BANLIST, erc-cmd-MASSUNBAN): Simplify.
-       (erc-prompt-for-channel-key, erc-ignore-reply-list, erc-send-post-hook)
-       (erc-active-buffer, erc-join-buffer, erc-frame-alist, erc-with-buffer)
-       (erc-modules, erc-display-message-highlight, erc-process-input-line)
-       (erc-cmd-HELP, erc-server-hooks, erc-echo-notice-in-user-buffers)
-       (erc-format-my-nick, erc-echo-notice-in-user-and-target-buffers)
-       (erc-echo-notice-in-first-user-buffer, erc-connection-established)
-       (erc-update-user-nick, erc-update-channel-member, erc-highlight-notice)
-       (erc-command-symbol, erc-add-query, erc-process-script-line)
-       (erc-determine-parameters, erc-client-info, erc-popup-input-buffer):
-       (erc-script-echo): Fix typos in docstrings.
-       (erc-channel-user-op-p, erc-channel-user-voice-p, erc-startup-file-list)
-       (define-erc-module, erc-once-with-server-event)
-       (erc-once-with-server-event-global, erc-debug-irc-protocol)
-       (erc-log-irc-protocol, erc-cmd-LOAD, erc-update-user)
-       (erc-update-current-channel-member, erc-load-script):
-       (erc-mode-line-away-status-format): Doc fixes.
-
-2006-11-20  Andrea Russo  <rastandy@inventati.org>  (tiny change)
-
-       * erc-dcc.el (erc-dcc-chat-setup): Initialize `erc-input-marker'
-       before calling `erc-display-prompt'.
-
-2006-11-24  Juanma Barranquero  <lekktu@gmail.com>
-
-       * erc.el (erc-after-connect, erc-open-ssl-stream)
-       (erc-display-line-1, erc-display-line):
-       * erc-backend.el (005): Fix space/tab mixup in docstrings.
-
-2006-11-20  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-version-string): Call this Version 5.2 stable
-       pre-release, since it diverges slightly from our 5.2 branch, in
-       that unstable features are not included.
-       (erc-update-modules): Display better error message when module not
-       found.
-
-2006-11-12  Michael Olson  <mwolson@gnu.org>
-
-       * erc-log.el: Save all log buffers when Emacs exits, in case
-       someone ignores the warning about open processes.  Remove the
-       advice code in the commentary.
-       (erc-save-query-buffers): Docfix.
-       (erc-log-save-all-buffers): New function that saves all ERC
-       buffers to logs.
-       (erc-current-logfile): Fix bug in filename selection, where the
-       current buffer was erroneously being preferred over the given
-       buffer.
-
-2006-11-08  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-string-to-port): Avoid error when a numerical port
-       is passed.  Thanks to Zekeriya KOÇ for the report.
-
-2006-11-08  Łukasz Demianiuk  <ldemianiuk@gmail.com>  (tiny change)
-
-       * erc.el (erc-header-line): Fix typo.
-
-2006-11-06  Juanma Barranquero  <lekktu@gmail.com>
-
-       * erc-dcc.el (erc-dcc-send-file): Fix typo in error message.
-
-       * erc.el (read-passwd):
-       * erc-autoaway.el (erc-autoaway-reestablish-idletimer):
-       * erc-truncate.el (truncate): Fix typo in docstring.
-
-2006-10-21  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-iswitchb): Fix bug when hitting C-c C-b without
-       first loading iswitchb.  Thanks to Leo for the report.
-
-2006-10-10  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-default-port): Make the default be 6667 instead of
-       ircd. since Mac OS X apparently has problems with looking up that
-       port name.
-
-       * erc-backend.el (353): Receive names after displaying the initial
-       message, instead of before.
-
-2006-10-05  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc.el (erc-my-nick-face): New face.
-       (erc): Use FULL-NAME argument, not `erc-user-full-name'.  This
-       fixes a bug where the :full-name argument passed to the function
-       was not respected.
-       (erc-format-my-nick): Use `erc-my-nick-face'.  This should help
-       make it easier to find messages you sent in conversations when
-       `erc-show-my-nick' is non-nil.
-       (erc-compute-server): Doc fix.
-
-2006-10-01  John J Foerch  <jjfoerch@earthlink.net>  (tiny change)
-
-       * erc-stamp.el (erc-insert-timestamp-right): Exclude the newline
-       from the erc-timestamp field.
-
-2006-09-11  Michael Olson  <mwolson@gnu.org>
-
-       * erc-nicklist.el (erc-nicklist-insert-contents): Add missing
-       parenthesis.  Thanks to Stephan Stahl for the report.
-
-2006-09-10  Eric Hanchrow  <offby1@blarg.net>  (tiny change)
-
-       * erc.el (erc-cmd-IGNORE): Prompt user if this might be a regexp
-       instead of a single user.
-
-2006-09-10  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-generate-new-buffer-name): If this is a server
-       buffer and a process exists already, create a new buffer.
-       (erc-open): If the IRC session was continued, restore the old
-       point.  Thanks to Stephan Stahl for the report.
-       (erc-member-ignore-case): Coding style tweak.
-       (erc-cmd-UNIGNORE): Quote the user before comparison.  If we don't
-       find the user listed verbatim, try to match them against the list
-       using string-match.  In this case, prompt as to whether the regexp
-       should be removed.
-       (erc-ignored-user-p): Remove CL-ism.
-
-       * erc-autoaway.el (erc-autoaway-possibly-set-away): Check to see
-       whether we are already away.
-
-       * erc-menu.el: Fix potential compiler warning.
-
-2006-09-07  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc.el: Updated Commentary and URL.
-       (erc-iswitchb, erc-display-line, erc-set-modes, erc-update-modes)
-       (erc-arrange-session-in-multiple-windows): No need to check if
-       `erc-server-process' is bound.
-       (erc-server-buffer-live-p): Doc fix.
-       (erc-part-from-channel): Don't use any initial contents at prompt.
-       (erc-format-nick, erc-format-@nick): Doc fix.  Use `when'.
-       (s367): Fixed to support only banmask and channel which is the
-       standard.  Also, there's no reason to add a message to each banned
-       user entry trying to persuade the user to use /banlist instead of
-       /mode #channel +b.  That part of the message was a little
-       confusing, anyways.
-       (s367-set-by): New catalog entry.  The user who set the ban and
-       the time of ban seem to be specific to only certain servers such
-       as freenode.
-
-       * erc-autoaway.el (erc-autoaway-idletimer): Doc fix.
-
-       * erc-backend.el (erc-server-process-alive): No need to check if
-       `erc-server-process' is bound.
-       (367): Use s367 or s367-set-by where appropriate.
-
-       * erc-compat.el: Fixed URL.
-
-       * erc-dcc.el: Updated copyright years.  Added Usage section.
-       Changed supported Emacs version number from 21.3.50 to 22 in
-       Commentary.
-
-       * erc-ibuffer.el (erc-server-name, erc-target, erc-away): No need
-       to check if `erc-server-process' is bound.
-
-       * erc-nicklist.el: Added to the Commentary section an explanation
-       that `erc-nicklist-quit' should be called from within the nicklist
-       buffer.  Set file coding to utf-8 so a contributor's name is
-       displayed correctly.
-       (erc-nicklist-icons-directory): Use customize type directory
-       instead of string.
-       (erc-nicklist-insert-contents): Set bbdb-nick to an empty string
-       if it wasn't found.  This fixes a bug where an error would occur
-       when using `string=' on bbdb-nick if it was nil.
-
-       * erc-replace.el: Removed URL from file information since it
-       doesn't exist.
-
-       * erc-sound.el: Updated copyright years.  Fixed Commentary and
-       added Usage section.
-       (define-erc-module): Add and remove `erc-ctcp-query-SOUND' to
-       `erc-ctcp-query-SOUND-hook' here.  Removed the keybinding
-       definitions.
-       (erc-play-sound, erc-default-sound, erc-cmd-SOUND)
-       (erc-ctcp-query-SOUND): Doc fix.
-       (erc-play-command): Removed, not necessary anymore.
-       (erc-ctcp-query-SOUND-hook): Set to nil as default.  Moved up
-       higher in code, added docstring.
-       (erc-play-sound): Use `play-sound-file'.  It exists in GNU Emacs
-       as well since version 21 or earlier.  Removed commented-out older
-       version of function.
-
-       * NEWS: Fixed formatting, added channel tracking change.
-
-2006-09-03  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc.el: M-x erc RET can now be used to start ERC.
-       (erc-open): Renamed from `erc'.
-       (erc-before-connect): Change erc-select to erc.
-       (erc): Renamed from `erc-select'.  Use `erc-open'.
-       (erc-select): Defined as alias of `erc'.
-       (erc-ssl): Renamed from `erc-select-ssl'.  Use `erc'.
-       (erc-select-ssl): Defined as alias of `erc-ssl'.
-       (erc-cmd-SERVER): Use `erc'.
-       (erc-query, erc-handle-irc-url): Use `erc-open'.
-
-       * erc-backend.el (erc-process-sentinel-1, JOIN): Use `erc-open'.
-
-       * erc-menu.el (erc-menu-definition): Use `erc'.
-
-       * erc-networks.el: Updated copyright years.
-       (erc-server-select): Use keyword arguments when calling `erc'.
-
-       * erc.texi (Getting Started, Connecting): Changed erc-select to
-       erc.
-
-       * NEWS: Added note about these changes.
-
-2006-08-20  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc-backend.el (erc-process-sentinel-1): Doc fix.  Let
-       `erc-server-reconnect-p' check all condition cases.
-       (erc-server-reconnect-p): Moved rest of checks from
-       `erc-process-sentinel-1' to here.  Now takes an argument, EVENT.
-
-2006-08-21  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc-track.el (erc-track-mode-line-mouse-face): New variable.
-       (erc-make-mode-line-buffer-name): Add help-echo and mouse-face
-       properties to channel name.
-
-2006-08-20  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-with-server-buffer): New macro that switches to the
-       current ERC server buffer and runs some code.  If no server buffer
-       is available, return nil.  This is a useful way to access
-       variables in the server buffer.
-       (erc-open-server-buffer-p): New function that returns non-nil if
-       the given buffer is an ERC server buffer that has an open IRC
-       process.
-
-2006-08-14  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc-menu.el: Updated copyright years.  Removed EmacsWiki URL.
-       (erc-menu-definition): Name the menu "ERC" instead of "IRC" to
-       avoid confusion with rcirc and other clients.
-
-       * erc-backend.el (erc-server-banned): New variable.
-       (erc-server-connect): Set `erc-server-banned' to nil.
-       (erc-process-sentinel-1): Use `erc-server-reconnect-p'.
-       (erc-server-reconnect-p): New function.  Return non-nil if the
-       user wants automatic reconnects and if the user has not been
-       banned from the server.  This should fix a bug where ERC gets into
-       a loop trying to reconnect with no way to stop it when the user is
-       denied access to the server due to a server ban.  It might also
-       help when Tor users are blocked from freenode if freenode servers
-       send the 465 message before disconnecting.
-       (465): Handle "banned from server" error notices.
-
-2006-08-13  Romain Francoise  <romain@orebokech.com>
-
-       * erc-match.el (erc-log-matches-make-buffer): End `y-or-n-p'
-       prompt with a space.
-
-2006-08-11  Michael Olson  <mwolson@gnu.org>
-
-       * erc-fill.el (erc-fill): Skip any initial empty lines so that we
-       avoid errors when inserting disconnect messages and other messages
-       that begin with newlines.
-
-2006-08-07  Michael Olson  <mwolson@gnu.org>
-
-       * erc-backend.el (erc-process-sentinel-1): Use erc-display-message
-       in several places instead of inserting text.
-       (erc-process-sentinel): Move to the input-marker before removing
-       the prompt.
-
-       * erc.el (erc-port): Fix customization options.
-       (erc-display-message): Handle null type explicitly.  Previously,
-       this was relying on a chance side-effect.  Cosmetic indentation
-       tweak.
-       (english): Add 'finished and 'terminated entries to the catalog.
-       Add initial and terminal newlines to 'disconnected and
-       'disconnected-noreconnect entries.  Avoid long lines.
-
-2006-08-06  Michael Olson  <mwolson@gnu.org>
-
-       * erc-backend.el (erc-server-send-queue): Update from Circe
-       version of this function.
-
-       * erc.el (erc-arrange-session-in-multiple-windows): Fix bug with
-       multi-tty Emacs.
-       (erc-select-startup-file): Fix bug introduced by recent change.
-
-2006-08-05  Michael Olson  <mwolson@gnu.org>
-
-       * erc-log.el (erc-log-standardize-name): New function that returns
-       a filename that is safe for use for a log file.
-       (erc-current-logfile): Use it.
-
-       * erc.el (erc-startup-file-list): Search in ~/.emacs.d first,
-       since that is a fairly standard directory.
-       (erc-select-startup-file): Re-write to use
-       convert-standard-filename, which will ensure that MS-DOS systems
-       look for the _ercrc.el file.
-
-2006-08-02  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-version-string): Release ERC 5.1.4.
-
-       * Makefile, NEWS, erc.texi: Update for the 5.1.4 release.
-
-       * erc.el (erc-active-buffer): Fix bug that caused messages to go
-       to the wrong buffer.  Thanks to offby1 for the report.
-
-       * erc-backend.el (erc-coding-system-for-target): Handle case where
-       target is nil.  Thanks to Kai Fan for the patch.
-
-2006-07-29  Michael Olson  <mwolson@gnu.org>
-
-       * erc-log.el (erc-log-setup-logging): Don't offer to save the
-       buffer.  It will be saved automatically killed.  Thanks to Johan
-       Bockgård and Tassilo Horn for pointing this out.
-
-2006-07-27  Johan Bockgård  <bojohan@users.sourceforge.net>
-
-       * erc.el (define-erc-module): Make find-function and find-variable
-       find the names constructed by `define-erc-module' in Emacs 22.
-
-2006-07-14  Michael Olson  <mwolson@gnu.org>
-
-       * erc-log.el (log): Make sure that we enable logging on
-       already-opened buffers as well, in case the user toggles this
-       module after loading ERC.  Also be sure to remove logging ability
-       from all ERC buffers when the module is disabled.
-       (erc-log-setup-logging): Set buffer-file-name to nil rather than
-       the empty string.  This should fix some errors that occur when
-       quitting Emacs without first killing all ERC buffers.
-       (erc-log-disable-logging): New function that removes the logging
-       ability from the current buffer.
-
-       * erc-spelling.el (spelling): Use dolist and buffer-live-p.
-
-2006-07-12  Michael Olson  <mwolson@gnu.org>
-
-       * erc-match.el (erc-log-matches): Bind inhibit-read-only rather
-       than call toggle-read-only.
-
-       * erc.el (erc-handle-irc-url): Move here from erc-goodies.el and
-       add autoload cookie.
-
-2006-07-09  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-version-string): Release ERC 5.1.3.
-
-       * erc.texi: Update for the 5.1.3 release.
-
-       * erc-autoaway.el (erc-autoaway-set-back): Fix bug after returning
-       from being set automatically away and current buffer is not an ERC
-       buffer.
-
-       * erc-identd.el: Fix compiler error.
-
-       * erc.texi (Development): Use @subheading instead of @subsection.
-       (Advanced Usage): Add menu.
-       (Connecting): Fully document how to connect to an IRC server.
-       (Options, Tips and Tricks, Sample Configuration): New unwritten
-       sections.
-
-       * erc.el (erc-server, erc-port, erc-nick, erc-nick-uniquifier)
-       (erc-user-full-name, erc-password): Docfixes and customization
-       interface tweaks.
-       (erc-try-new-nick-p): Rename from
-       `erc-manual-set-nick-on-bad-nick-p' and invert meaning.
-       (erc-nickname-in-use): Use `erc-try-new-nick-p'.  Check the length
-       of `erc-nick-uniquifier', in case someone wants multiple
-       characters.
-       (erc-compute-server, erc-compute-nick, erc-compute-full-name)
-       (erc-compute-port): Docfixes.
-
-       * erc-log.el (log): Move all add-hook calls here, rather than
-       executing them immediately, and also cause them to be un-hooked
-       when the module is removed.
-       (erc-save-buffer-on-part): Move next to
-       `erc-save-queries-on-quit'.
-       (erc-save-buffer-on-quit, erc-save-queries-on-quit): Default to t.
-       (erc-log-write-after-send, erc-log-write-after-insert): Default to
-       nil.  This makes things fast, but reasonably failsafe, by default.
-
-2006-07-08  Michael Olson  <mwolson@gnu.org>
-
-       * erc-log.el (erc-log-insert-log-on-open): Make this nil by
-       default, since most IRC clients don't do this.
-       (erc-log-write-after-send): New option that determines whether the
-       log file will be written to after every sent message.
-       (erc-log-write-after-insert): New option that determines whether
-       the log file will be written to when new text is added to a logged
-       ERC buffer.
-       (log): Use the aforementioned options.
-
-       * erc.texi (Modules): Document the "completion" module.
-
-       * erc-pcomplete.el (pcomplete-erc-nicks): Make sure that we don't
-       have a nil element in the list when ignore-self is non-nil.
-
-2006-07-05  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-modules): Add the `page' module to the list.
-
-       * erc.texi (Modules): Add entries for `list' and `page' modules.
-       Change "spell" to "spelling".
-       (History): Use past tense throughout.
-
-2006-07-02  Michael Olson  <mwolson@gnu.org>
-
-       * erc-backend.el (erc-call-hooks): Fix (stringp nil) error that
-       can happen when doing /PART.
-
-       * erc.el (erc-quit-reason-various-alist)
-       (erc-part-reason-various-alist): In the example, use "^$" as an
-       example, since "" matches anything.
-       (erc-quit-reason-various, erc-part-reason-various): If no argument
-       is given, and no matches are found, use our default reason instead
-       of "nil".
-
-2006-06-30  Michael Olson  <mwolson@gnu.org>
-
-       * erc.texi (Modules): Mention identd.
-       (Releases): Update mailing list address and download location.
-       (Development): Refactor.  Provide updated directions for Arch.
-       Make URLs clickable.
-       (Keystroke Summary): Typo fix.  Use more Texinfo syntax.
-       (Getting Started): Give simpler example.  We do not need to
-       explicitly load every module.
-       (History): Update.
-
-       * erc.el (erc-version-modules): Remove, since we do not use this
-       function anymore.
-       (erc-latest-version, erc-ediff-latest-version): Remove, since this
-       was only useful back when ERC consisted of one file.
-       (erc-modules): Add line for identd.
-       (erc-get-channel-mode-from-keypress): Typo fix.
-
-       * erc-imenu.el: Remove unnecessary lines in header.
-
-       * erc-goodies.el (erc-handle-irc-url): Docfix.
-
-       * erc-identd.el: Define an ERC module for this.
-       (erc-identd-start): Don't create a process buffer if possible.
-       Otherwise, use conventional hidden names for process buffers.
-
-2006-06-29  Michael Olson  <mwolson@gnu.org>
-
-       * erc-backend.el (erc-coding-system-for-target): Match
-       case-insensitively.  Use a pattern match instead of `assoc', as
-       per the documentation for `erc-encoding-coding-alist'.
-
-       * erc-track.el (erc-track-shorten-aggressively): Fix typo.
-
-2006-06-27  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el: Update maintainer information and URLs.
-
-2006-06-14  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-active-buffer): If the active buffer has been
-       deleted, default to the server buffer.
-       (erc-toggle-flood-control): When the user hits C-c C-f, make flood
-       control really toggle, not unconditionally turn off.
-
-2006-06-12  Michael Olson  <mwolson@gnu.org>
-
-       * NEWS: Add items since the 5.1.2 release.
-
-       * erc-autoaway.el (erc-autoaway-caused-away): New variable that
-       indicates whether the current away status was caused by this
-       module.
-       (erc-autoaway-set-back): Only set back if this module set the user
-       away.
-       (erc-autoaway-set-away): Update `erc-autoaway-caused-away'.
-       (erc-autoaway-reset-indicators): New function that resets some
-       indicators when the user is no longer away.
-       (autoaway): Add the above function to the 305 hook.
-
-2006-06-05  Romain Francoise  <romain@orebokech.com>
-
-       * erc.texi (History): Fix various typos.
-
-2006-06-04  Michael Olson  <mwolson@gnu.org>
-
-       * erc-autoaway.el (erc-autoaway-idle-method): Move after the
-       definition of the autoaway module.
-       (autoaway): Don't do anything if erc-autoaway-idle-method is
-       unbound.  This prevents an error on startup.
-
-2006-06-03  Michael Olson  <mwolson@gnu.org>
-
-       * erc-autoaway.el: Thanks to Mark Plaksin for the ideas and patch.
-       (erc-autoaway-idle-method): Renamed from
-       `erc-autoaway-use-emacs-idle'.  We have more than two choices for
-       how to do this, so it's best to make this take symbol values.
-       Improve documentation.  Remove warning against Emacs idle-time;
-       the point is moot now that we get user idle time via a different
-       method.  Make sure we disable and re-enable the module when
-       changing this value.
-       (autoaway): Conditionalize on the above option.  If using the idle
-       timer or user idle methods, don't add anything to the
-       send-completed or server-001 hooks, since it is unnecessary.
-       (erc-autoaway-reestablish-idletimer, erc-autoaway-message):
-       Docfix.
-       (erc-autoaway-idle-seconds): Use erc-autoaway-idle-method.
-       (erc-autoaway-reset-idle-irc): Renamed from
-       `erc-autoaway-reset-idle'.  Don't pass line to
-       `erc-autoaway-set-away', since it is not used.
-       (erc-autoaway-reset-idle-user): New function that resets the idle
-       state for user idle time.
-       (erc-autoaway-set-back): Remove line argument, since it is not
-       used.
-
-2006-06-01  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-buffer-filter): Make sure all buffers returned from
-       this are live.
-
-2006-05-01  Edward O'Connor  <ted@oconnor.cx>
-
-       * erc-goodies.el (erc-handle-irc-url): New function, suitable as
-       a value for `url-irc-function'.
-
-2006-04-18  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc-pcomplete.el (pcomplete-erc-nicks): Added new optional
-       argument IGNORE-SELF.  If this is non-nil, don't return the user's
-       current nickname.  Doc fix.
-       (pcomplete/erc-mode/complete-command): Don't complete the current
-       nickname.
-
-2006-04-05  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc.el (erc-cmd-SV): Removed the exclamation point.  Show the
-       build date as it's shown in `emacs-version'.
-
-       * erc-capab.el (erc-capab-identify-add-prefix): Insert the prefix
-       with the same face property as the previous character.
-
-2006-04-02  Michael Olson  <mwolson@gnu.org>
-
-       * erc-backend.el, erc-ezbounce.el, erc-join.el, erc-netsplit.el,
-       erc.el: Make sure to include a newline inside of negated classes,
-       so that a newline is not matched.
-
-2006-04-01  Michael Olson  <mwolson@gnu.org>
-
-       * erc-backend.el (erc-server-connect-function): Don't try to
-       detect the existence of the `open-network-stream-nowait' function,
-       since I can't find it in Emacs21, XEmacs21, or Emacs22.
-
-2006-03-26  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-header-line): New face that will be used to colorize
-       the text of the header-line, provided that
-       `erc-header-line-face-method' is non-nil.
-       (erc-prompt-face): Fix formatting.
-       (erc-header-line-face-method): New option that determines the
-       method used for colorizing header-line text.  This may be a
-       function, nil, or non-nil.
-       (erc-update-mode-line-buffer): Use the aforementioned option and
-       face to colorize the header-line text, if that is what the user
-       wants.
-       (erc-send-input): If flood control is not activated, don't split
-       the input line.
-
-2006-03-25  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-cmd-QUOTE): Install patch from Aravind Gottipati
-       that fixes the case where there is no leading whitespace.  Only
-       remove the first space character, though.
-
-       * erc-identd.el (erc-identd-start): Fix a bug by making sure that
-       erc-identd-process is set properly.
-       (erc-identd-start, erc-identd-stop): Add autoload cookies.
-       (erc-identd-start): Pass :host parameter so this works with Emacs
-       22.
-
-2006-03-09  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc-button.el (erc-button-keymap): Use <backtab> rather than
-       <C-tab> for `erc-button-previous' as it is a more standard key
-       binding for this type of function.
-
-2006-02-28  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc-capab.el: Removed things that were accidentally committed on
-       2006-02-20.  Removed Todo section.
-       (erc-capab-unidentified): Removed.
-
-2006-02-26  Michael Olson  <mwolson@gnu.org>
-
-       * erc-capab.el: Use (eval-when-compile (require 'cl)).
-       (erc-capab-unidentified): Fix compiler warning by specifying
-       group.
-
-2006-02-20  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc-capab.el (erc-capab-send-identify-messages): Fixed comment
-       to explain thoughts better.  `erc-server-parameters' is an
-       associated list when it's set, not a string.
-
-2006-02-19  Michael Olson  <mwolson@gnu.org>
-
-       * erc-capab.el (erc-capab-send-identify-messages): Make sure some
-       parameters are strings before using them.  Thanks to Alejandro
-       Benitez for the report.
-
-       * erc.el (erc-version-string): Release ERC 5.1.2.
-
-2006-02-19  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc-button.el (erc-button-keymap): Bind `erc-button-previous' to
-       <C-tab>.
-       (erc-button-previous): New function.
-
-2006-02-15  Michael Olson  <mwolson@gnu.org>
-
-       * NEWS: Add category for ERC 5.2.
-
-       * erc.el (erc): Move to the end of the buffer when a continued
-       session is detected.  Thanks to e1f and indio for the report and
-       testing a potential fix.
-
-2006-02-14  Michael Olson  <mwolson@gnu.org>
-
-       * debian/changelog: Prepare a new Debian package.
-
-       * Makefile (debprepare): New rule that creates an ERC snapshot
-       directory for use in both new Debian releases and revisions for
-       Debian packages.
-       (debrelease, debrevision-mwolson): Use debprepare.
-
-       * NEWS: Bring up-to-date.
-
-       * erc-stamp.el (erc-insert-timestamp-right): For now, put
-       timestamps before rather than after erc-fill-column when
-       erc-timestamp-right-column is nil.  This way we won't surprise
-       anyone unpleasantly, or so it is hoped.
-
-2006-02-13  Michael Olson  <mwolson@gnu.org>
-
-       * erc-dcc.el: Use (eval-when-compile (require 'cl)).
-
-2006-02-12  Michael Olson  <mwolson@gnu.org>
-
-       * erc-autoaway.el, erc-dcc.el, erc-ezbounce.el, erc-fill.el
-       * erc-goodies.el, erc-hecomplete.el, erc-ibuffer.el, erc-identd.el
-       * erc-imenu.el, erc-join.el, erc-lang.el, erc-list.el, erc-log.el
-       * erc-match.el, erc-menu.el, erc-netsplit.el, erc-networks.el
-       * erc-notify.el, erc-page.el, erc-pcomplete.el, erc-replace.el
-       * erc-ring.el, erc-services.el, erc-sound.el, erc-speedbar.el
-       * erc-spelling.el, erc-track.el, erc-truncate.el, erc-xdcc.el:
-       Add 2006 to copyright years, to comply with the changed guidelines.
-
-2006-02-11  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-update-modules): Handle erc-capab-identify
-       correctly.  Make some requirements shorter, so that it's easier to
-       see why they are needed.
-
-       * erc-capab.el: Add autoload cookie for capab-identify.
-       (erc-capab-send-identify-messages, erc-capab-identify-activate):
-       Minor whitespace fix in code.
-
-       * erc-stamp.el (erc-timestamp-use-align-to): Renamed from
-       `erc-timestamp-right-align-by-pixel'.  Set the default based on
-       whether we are in Emacs 22, and using X.  Improve documentation.
-       (erc-insert-aligned): Remove calculation of offset, since
-       :align-to pos works after all.  Unlike the previous solution, this
-       one works when erc-stamp.el is compiled.
-       (erc-insert-timestamp-right): Don't add length of string, and then
-       later remove its displayed width.  This puts timestamps after
-       erc-fill-column when erc-timestamp-right-column is nil, rather
-       than before it.  It also fixes a subtle bug.  Remove use of
-       `current-window', since there is no variable by that name in
-       Emacs21, Emacs22, or XEmacs21 beta.  Check to see whether
-       `erc-fill-column' is non-nil before using it.
-
-2006-02-11  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc-list.el: Define `list' module which sets the alias
-       `erc-cmd-LIST' to `erc-list-channels' when enabled and
-       `erc-list-channels-simple' when disabled.
-       (erc-list-channels): Was `erc-cmd-LIST', renamed.
-       (erc-list-channels-simple): New function.
-
-       * erc.el (erc-modules): Added `list' to enabled modules.  Changed
-       `capab-identify' description.  Moved customization options left in
-       source code.
-
-       * erc-menu.el (erc-menu-definition): Use `erc-list-channels'.
-
-       * erc-capab.el: Put a little more detail into Usage section.
-       (define-erc-module): Run `erc-capab-identify-setup' in all open
-       server buffers when enabling.
-       (erc-capab-identify-setup): Make PROC and PARSED optional
-       arguments.
-       (erc-capab-identify-add-prefix): Simplified nickname regexp.  This
-       should now also match nicknames that are formatted differently
-       than the default.
-
-       * erc-spelling.el (define-erc-module): Make sure there's a buffer
-       before calling `with-current-buffer'.
-
-2006-02-10  Michael Olson  <mwolson@gnu.org>
-
-       * Makefile (debbuild): Split from debrelease.
-       (debrevision-mwolson): New rule that causes a Debian revision to
-       be built.
-
-       * erc.el (erc-migrate-modules): Use a better algorithm.  Thanks to
-       Johan Bockgård.
-       (erc-modules): Change use of 'pcomplete to 'completion.
-
-2006-02-09  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc.el (erc-get-parsed-vector, erc-get-parsed-vector-nick)
-       * erc-capab.el: Require erc.
-       (erc-capab-send-identify-messages): Use `erc-server-send'.
-       (erc-capab-identify-remove/set-identified-flag): Use 1 and 0 as
-       the flags so we can also check whether the `erc-identified' text
-       property is there at all.
-       (erc-capab-identify-add-prefix): Use `erc-capab-find-parsed'.
-       This fixes a bug where the prefix wasn't inserted when timestamps
-       are inserted on the right.  Tweaked nickname regexp.
-       (erc-capab-find-parsed): New function.
-       (erc-capab-get-unidentified-nickname): Updated to check for 0
-       flag.  Only get nickname if there's a nickuserhost associated with
-       this message.
-
-       * erc-capab.el: New file.  Adds the new module
-       `erc-capab-identify', which allows flagging of unidentified users
-       on servers running an ircd based on dancer - irc.freenode.net, for
-       example.
-
-       * erc.el (erc-modules): Added `capab-identify' to options.
-       (erc-get-parsed-vector, erc-get-parsed-vector-nick)
-       (erc-get-parsed-vector-type): Moved here from erc-match.el.
-
-       * erc-match.el (erc-get-parsed-vector, erc-get-parsed-vector-nick)
-       (erc-get-parsed-vector-type): Moved these functions to erc.el
-       since they can be useful outside of the text matching module.
-
-       * NEWS: Added erc-capab.el.
-
-       * erc-dcc.el, erc-stamp.el, erc-xdcc.el: Changed "Emacs IRC Client"
-       to "ERC".
-
-2006-02-07  Michael Olson  <mwolson@gnu.org>
-
-       * ChangeLog.01, ChangeLog.02, ChangeLog.03, ChangeLog.04,
-       ChangeLog.05: Rename from ChangeLog.NNNN in order to disambiguate
-       the filenames in DOS.
-
-       * erc-goodies.el: Comment fix.
-
-       * erc-hecomplete.el: Rename from erc-complete.el.  Update
-       commentary.  Use define-erc-module so that it's possible to
-       actually use this.
-       (erc-hecomplete): Rename function from `erc-complete'.
-       (erc-hecomplete): Rename group from `erc-old-complete'.  Docfix.
-
-       * erc-join.el: Rename from erc-autojoin.el.
-
-       * erc-networks.el: Rename from erc-nets.el.
-
-       * erc-services.el: Rename from erc-nickserv.el.
-
-       * erc-stamp.el (erc-insert-aligned): Don't take 3rd argument.  Use
-       the simpler `indent-to' function when
-       `erc-timestamp-right-align-by-pixel' is nil.
-       (erc-insert-timestamp-right): If the timestamp goes on the
-       following line, don't add timestamp properties to the spaces in
-       front of it.
-
-       * erc.el (erc-migrate-modules): New function that eases migration
-       of module names.
-       (erc-modules): Call erc-migrate-modules in the :get accessor.
-       (erc-modules, erc-update-modules): Update for new modules names.
-       (erc-cmd-SMV): Remove, since this does not give useful output due
-       to the version strings being removed from ERC modules.
-
-2006-02-05  Michael Olson  <mwolson@gnu.org>
-
-       * erc-spelling.el (erc-spelling-init): If
-       `erc-spelling-dictionaries' is nil, do not set
-       ispell-local-dictionary.  Before, it was being set to nil, which
-       was causing a long delay while the ispell process restarted.
-       (erc-spelling-unhighlight-word): New function that removes
-       flyspell properties from a spell-checked word.
-       (erc-spelling-flyspell-verify): Don't spell-check nicks or words
-       that have '/' before them.
-
-2006-02-04  Michael Olson  <mwolson@gnu.org>
-
-       * erc-autojoin.el: Use (eval-when-compile (require 'cl)).
-
-       * erc-complete.el (erc-nick-completion-exclude-myself)
-       (erc-try-complete-nick): Use better function for getting list of
-       channel users.
-
-       * erc-goodies.el: Docfix.
-
-       * erc-stamp.el: Use new arch tagline, since the other one wasn't
-       being treated properly.
-
-       * erc.el (erc-version-string): Release ERC 5.1.1.
-
-2006-02-03  Zhang Wei  <id.brep@gmail.com>
-
-       * erc.el (erc-version-string): Don't hard-code Emacs version.
-       (erc-version): Use emacs-version.
-
-2006-01-31  Michael Olson  <mwolson@gnu.org>
-
-       * erc-stamp.el: Update copyright years.
-
-2006-01-30  Simon Josefsson  <jas@extundo.com>
-
-       * erc.el (erc-open-ssl-stream): Use tls.el.
-
-2006-01-30  Michael Olson  <mwolson@gnu.org>
-
-       * erc-stamp.el (erc-timestamp-right-align-by-pixel): New option
-       that determines whether to use pixel values to align right
-       timestamps.  The default is not to do so, since it only works with
-       Emacs22 on X, and even then some people have trouble.
-       (erc-insert-aligned): Use `erc-timestamp-right-align-by-pixel'.
-
-2006-01-29  Michael Olson  <mwolson@gnu.org>
-
-       * ChangeLog, ChangeLog.2005, ChangeLog.2004, ChangeLog.2003,
-       ChangeLog.2002, ChangeLog.2001: Add "See ChangeLog.NNNN" line for
-       earlier changes.  Use utf-8 encoding.  Fix some accent typos.
-
-       * erc-speedbar.el (erc-speedbar-buttons): Fix reference to free
-       variable.
-       (erc-speedbar-goto-buffer): Fix compiler warning.
-
-       * erc-ibuffer.el: Use `define-ibuffer-filter' instead of
-       `ibuffer-degine-limiter'.  Use `define-ibuffer-column' instead of
-       `ibuffer-define-column'.  Require 'ibuf-ext so that the macros
-       work without compiler warnings.
-
-       * man/erc.texi (Obtaining ERC, Installation): Note that these
-       sections may be skipped if using the version of ERC that comes
-       with Emacs.
-
-2006-01-29  Edward O'Connor  <ted@oconnor.cx>
-
-       * erc-viper.el: Remove.  Now that ERC is included in Emacs, these
-       work-arounds live in Viper itself.
-
-2006-01-28  Michael Olson  <mwolson@gnu.org>
-
-       * erc-*.el, erc.texi, NEWS: Add Arch taglines as per Emacs
-       guidelines.
-
-       * erc-*.el: Space out copyright years like the rest of Emacs.  Use
-       the Emacs copyright statement.  Refer to ourselves as ERC rather
-       than "Emacs IRC Client", since there are now several IRC clients
-       for Emacs.
-
-       * erc-compat.el (erc-emacs-build-time): Define as a variable.
-
-       * erc-log.el (erc-log-setup-logging): Use write-file-functions.
-
-       * erc-ibuffer.el: Require 'erc.
-
-       * erc-stamp.el (erc-insert-aligned): Only use the special text
-       property when window-system is X.
-
-       * erc.texi: Adapt for inclusion in Emacs.
-
-2006-01-28  Johan Bockgård  <bojohan@users.sourceforge.net>
-
-       * erc.el (erc-format-message): More `cl' breakage; don't use
-       `oddp'.
-
-2006-01-27  Michael Olson  <mwolson@gnu.org>
-
-       * debian/changelog: Update for new release.
-
-       * debian/control (Description): Update.
-
-       * debian/rules: Concatenate ChangeLog for 2005.
-
-       * Makefile (MISC): Include ChangeLog.2005 and erc.texi.
-       (debrelease, release): Copy images directory.
-
-       * NEWS: Spelling fixes.  Add items for recent changes.
-
-       * erc.el (erc): Move call to erc-update-modules before the call to
-       erc-mode.  This should fix a timestamp display issue.
-       (erc-version-string): Release ERC 5.1.
-
-2006-01-26  Michael Olson  <mwolson@gnu.org>
-
-       * erc-stamp.el (erc-insert-aligned): New function that inserts
-       text in an perfectly-aligned way relative to the right margin.  It
-       only works well with Emacs22.  A sane fallback is provided for
-       other versions of Emacs.
-       (erc-insert-timestamp-right): Use the new function.
-
-2006-01-25  Edward O'Connor  <ted@oconnor.cx>
-
-       * erc.el (erc-modules): Ensure that `erc-button-mode' gets enabled
-       before `erc-match-mode'.
-
-       * erc-match.el (match): Append `erc-match-message' to
-       `erc-insert-modify-hook'.
-
-2006-01-25  Michael Olson  <mwolson@gnu.org>
-
-       * FOR-RELEASE: Mark last release requirement as done.
-
-       * Makefile (realclean, distclean): Remove docs.
-
-       * erc.texi: Take care of all pre-5.1 items.
-
-       * erc-backend.el (erc-server-send, erc-server-send-queue): Wrap
-       `process-send-string' in `condition-case' to avoid an error when
-       quitting ERC.
-
-       * erc-stamp.el (erc-insert-timestamp-right): Try to deal with
-       variable-width characters in the timestamp and on the same line.
-       The latter is a kludge, but it seems to work with most of the
-       input I've thrown at it so far.  It's certainly better than going
-       past the end of line consistently when we have variable-width
-       characters on the same line.  When `erc-timestamp-intangible' is
-       non-nil, add intangible properties to the whitespace as well, so
-       that hitting <end> does what you'd expect.
-
-       * erc.el (erc-flood-protect, erc-toggle-flood-control): Update
-       this to only use boolean values for `erc-flood-protect'.  Update
-       documentation.
-       (erc-cmd-QUIT): Set the active buffer to be the server buffer, so
-       that any QUIT-related messages go there.
-       (erc): Try to be more clever about re-using channel buffers when
-       automatically re-connecting.  Thanks to e1f for noticing.
-
-2006-01-23  Michael Olson  <mwolson@gnu.org>
-
-       * ChangeLog.2005: Remove erroneous line.
-
-       * FOR-RELEASE: Make that the Makefile tweaking is complete.
-       (NEWS): Mark as done.
-
-       * Makefile (MANUAL): New option indicating the name of the manual.
-       (PREFIX, ELISPDIR, INFODIR): New options that specify the
-       directories to install lisp code and info manuals to.  PREFIX is
-       used only by ELISPDIR and INFODIR.
-       (all): Call `lisp' and create the manual.
-       (lisp): Compile lisp code.
-       (%.info, %.html): New rules that make Info files and HTML files,
-       respectively, from a TexInfo source.
-       (doc): Create both the Info and HTML versions of the manual.  This
-       is for the user -- we never call it automatically.
-       (install-info): Install Info files.
-       (install-bin): Install compiled and source Lisp files.
-       (todo): Remove, since it seems pointless.
-
-       * NEWS: Update.
-
-       * README: Add Installation instructions.  Tweak layout.
-
-       * erc.texi: Work on some pre-5.1 items.
-
-       * erc-stamp.el, erc-track.el: Move some functions and options in
-       order to get rid of a few compiler warnings.
-
-       * erc.el (erc-modules): Enable readonly by default.  This will
-       prevent new users from accidentally removing old messages, which
-       could be disconcerting.  Also enable stamp by default, since
-       timestamps are a fairly standard feature among IRC clients.
-
-       * erc-button.el: Munge whitespace.
-
-       * erc-identd.el (erc-identd-start): Instead of throwing an error,
-       just try to use the obsolete function.
-
-2006-01-22  Michael Olson  <mwolson@gnu.org>
-
-       * erc-backend.el (erc-decode-string-from-target): Make sure that
-       we have a string as an argument.  If not, coerce it to the empty
-       string.  Hopefully, this will work painlessly around an edge case
-       related to quitting ERC around the same time a message comes in.
-
-2006-01-22  Johan Bockgård  <bojohan@users.sourceforge.net>
-
-       * erc-track.el: Use `(eval-when-compile (require 'cl))' (for
-       `case').  Doc fixes.
-       (erc-find-parsed-property): Simplify.
-       (erc-track-get-active-buffer): Fix logic.  Simplify.
-       (erc-track-switch-buffer): Remove unused variable `dir'.  Simplify.
-
-       * erc-speak.el: Doc fixes.
-       (erc-speak-region): `propertize' --> `erc-propertize'.
-
-       * erc-dcc.el (erc-dcc-chat-parse-output): `propertize' -->
-       `erc-propertize'.
-
-       * erc-button.el (erc-button-add-button): Take erc-fill-prefix into
-       account when wrapping URLs.
-
-       * erc-bbdb.el (erc-bbdb-elide-display): Doc fix.
-
-       * erc-backend.el (define-erc-response-handler): Doc fix.
-
-2006-01-22  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-update-modules): Use `require' instead of `load',
-       but prevent it from causing errors, in order to preserve the
-       previous behavior.
-
-2006-01-21  Michael Olson  <mwolson@gnu.org>
-
-       * FOR-RELEASE (Source): Mark cl task as done.
-
-       * Makefile (erc-auto.el): Call erc-generate-autoloads rather than
-       generate-autoloads.
-       (erc-auto.el, %.elc): Don't show command, just its output.
-
-       * NEWS: Add items from 2005-01-01 to 2005-08-13.
-
-       * debian/copyright (Copyright): Update.
-
-       * erc-auto.in (erc-generate-autoloads): Rename from
-       generate-autoloads.
-
-       * erc.el, erc-autoaway.el, erc-backend.el: Use
-       erc-server-process-alive instead of erc-process-alive.
-
-       * erc.el, erc-backend.el, erc-ezbounce.el, erc-list.el,
-       erc-log.el, erc-match.el, erc-nets.el, erc-netsplit.el,
-       erc-nicklist.el, erc-nickserv.el, erc-notify.el, erc-pcomplete.el:
-       Use (eval-when-compile (require 'cl)), so that compilation doesn't
-       fail.
-
-       * erc-fill.el, erc-truncate.el: Whitespace munging.
-
-       * erc.el: Update copyright notice.  Remove eval-after-load code.
-       (erc-with-buffer): Docfix.
-       (erc-once-with-server-event, erc-once-with-server-event-global)
-       (erc-with-buffer, erc-with-all-buffers-of-server): Use erc-gensym
-       instead of gensym.
-       (erc-banlist-update): Use erc-delete-if instead of delete-if.
-       (erc): Call `erc-update-modules' here.
-
-       * erc-backend.el: Require 'erc-compat to minimize compiler
-       warnings.
-       (erc-decode-parsed-server-response): Docfix.
-       (erc-server-process-alive): Move here from erc.el and rename from
-       `erc-process-alive'.
-       (erc-server-send, erc-remove-channel-users): Make sure process is
-       alive before sending data to it.
-
-       * erc-bbdb.el: Update copyright years.
-       (erc-bbdb-whois): Remove overexuberant comment.
-
-       * erc-button.el: Require erc-fill, since we make liberal use of
-       `erc-fill-column'.
-
-       * erc-compat.el (erc-const-expr-p, erc-list*, erc-assert): New
-       functions, the latter of which provides an `assert' equivalent.
-       (erc-remove-if-not): New function that provides a simple
-       implementation of `remove-if-not'.
-       (erc-gensym): New function that provides a simple implementation
-       of `gensym'.
-       (erc-delete-if): New function that provides a simple
-       implementation of `delete-if'.
-       (erc-member-if): New function that provides a simple
-       implementation of `member-if'.
-       (field-end): Remove this, since it is unused, and later versions
-       of XEmacs have this function already.
-       (erc-function-arglist): Moved here from erc.el.
-       (erc-delete-dups): New compatibility function for dealing with
-       XEmacs.
-       (erc-subseq): New function copied from cl-extra.el.
-
-       * erc-dcc.el: Require pcomplete during compilation to avoid
-       compiler warnings.
-       (erc-unpack-int, erc-dcc-send-filter)
-       (erc-dcc-get-filter): Use erc-assert instead of assert.
-       (pcomplete/erc-mode/DCC): Use erc-remove-if-not instead of
-       remove-if-not.
-
-       * erc-match.el (erc-log-matches): Fix compiler warning.
-
-       * erc-nicklist.el: Update copyright notice.
-       (erc-nicklist-menu): Change use of caadr to (car (cadr ...)).
-       (erc-nicklist-bitlbee-connected-p): Remove.
-       (erc-nicklist-insert-medium-name-or-icon): Accept channel
-       argument.  Use it to determine whether we are on bitlbee.  Now
-       that bitlbee names its channel "&bitlbee", this is trivial.
-       (erc-nicklist-insert-contents): Pass channel as specified above.
-       Don't try to determine whether we are on bitlbee here.
-       (erc-nicklist-channel-users-info): Use erc-remove-if-not instead
-       of remove-if-not.
-       (erc-nicklist-search-for-nick): Use erc-member-if instead of
-       member-if.
-
-       * erc-notify.el (erc-notify-QUIT): Use erc-delete-if with a
-       partially-evaluated lambda expression instead of `delete' and
-       `find'.
-
-       * erc-track.el: Use erc-assert.
-       (erc-track-modified-channels): Remove use of `return'.
-       (erc-track-modified-channels): Use `cadr' instead of `second',
-       since otherwise we would need yet another eval-when-compile line.
-
-2006-01-19  Michael Olson  <mwolson@gnu.org>
-
-       * erc-backend.el (erc-process-sentinel-1): Remove attempt to
-       detect SIGPIPE, since it doesn't work.
-
-2006-01-10  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc-spelling.el: Updated copyright years.
-       (define-erc-module): Enable/disable `flyspell-mode' for all open
-       ERC buffers as well.
-       (erc-spelling-dictionaries): Reworded customize description.
-
-       * erc.el (erc-command-symbol): New function.
-       (erc-extract-command-from-line): Use `erc-command-symbol'.  This
-       fixes a bug where "Symbol's function definition is void:
-       erc-cmd-LIST" would be shown after typing /list at the prompt (the
-       command was interned because erc-menu.el uses it and is enabled by
-       default whereas erc-list.el is not).
-
-       * NEWS: Started a list of renamed variables.
-
-       * erc.el: Reworded the message sent when defining variable
-       aliases.
-       (erc-command-indicator-face): Doc fix.
-       (erc-modules): Enable the match module by default which makes
-       current nickname highlighting on as the default.
-
-       * erc-button.el: Updated copyright years.
-       (erc-button): New face.
-       (erc-button-face): Use `erc-button'.
-       (erc-button-nickname-face): New customizable variable.
-       (erc-button-add-nickname-buttons, erc-button-add-buttons-1): Send
-       new argument to `erc-button-add-button'.
-       (erc-button-add-button): Doc fix.  Added new argument to function
-       definition, NICK-P.  If it's a nickname, use
-       `erc-button-nickname-face', otherwise use `erc-button-face'.  This
-       makes channel tracking and buttons work better together when
-       `erc-button-buttonize-nicks' is enabled, since there is a nickname
-       on just about every line.
-
-       * erc-track.el (erc-track-use-faces): Doc fix.
-       (erc-track-faces-priority-list): Added `erc-button' to list.
-       (erc-track-priority-faces-only): Doc fix.
-
-2006-01-09  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc-button.el (erc-button-url-regexp): Use `concat' so the
-       regexp is not one long line.
-       (erc-button-alist): Fixed so that customizing works correctly.
-       Reorganized.  Removed lambda functions with more than two lines.
-       Doc fix.
-       (erc-button-describe-symbol, erc-button-beats-to-time): New
-       functions.  Moved from `erc-button-alist'.
-
-2006-01-07  Michael Olson  <mwolson@gnu.org>
-
-       * erc-backend.el (erc-process-sentinel-1): Don't try to re-open a
-       process if a SIGPIPE occurs.  This happens when a new message
-       comes in at the same time a /quit is requested.
-       (erc-process-sentinel): Use string-match rather than string= to do
-       these comparisons.  Matching literal newlines makes me nervous.
-
-       * erc-track.el (erc-track-remove-from-mode-line): Handle case
-       where global-mode-string is not a list.  Emacs22 permits this.
-
-
-See ChangeLog.05 for earlier changes.
-
-    Copyright (C) 2006, 2007 Free Software Foundation, Inc.
-
-  This file is part of GNU Emacs.
-
-  GNU Emacs 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 2, or (at your option)
-  any later version.
-
-  GNU Emacs 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 GNU Emacs; see the file COPYING.  If not, write to the
-  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-  Boston, MA 02110-1301, USA.
-
-;; Local Variables:
-;; coding: utf-8
-;; add-log-time-zone-rule: t
-;; End:
-
-;; arch-tag: 865a75f6-2bcb-46df-bf0c-b514dadf688a
+2007-04-01  Michael Olson  <mwolson@gnu.org>
+
+       * erc.el (erc-version-string): Release ERC 5.2.
+
+       * erc-auto.in, erc-chess.el, erc-list.el, erc-speak.el:
+       * erc-viper.el: Update copyright notices.
+
+       * erc.texi: Make Emacs Lisp source code in this document
+       essentially public domain.  Update version to 5.2.
+       (Obtaining ERC): Mention extras tarball.
+       (Releases): Mention local GNU mirror.
+       (Sample Configuration): Remove notice.
+
+       * FOR-RELEASE (5.3): Add item for erc-nicklist.
+       Mark NEWS as done.  Mark extras tarball as done.
+
+       * Makefile (VERSION): Increment to 5.2.
+       (TESTING): Remove.
+       (EXTRAS): New variable containing the contents of our "Emacs 22
+       extras" tarball.
+       (SOURCE): Remove $(TESTING).
+       (MISC): Add COPYING and ChangeLog.06.  Fix ChangeLog.NNNN ->
+       ChangeLog.NN.
+       (release): Use $(SNAPDIR) instead of erc-$(VERSION).
+       (extras): New rule which implements the building of the extras
+       tarball.
+       (upload-extras): New rule to upload the extras tarball.  It's
+       yucky to replicate upload, but oh well.
+
+       * NEWS: Mention extras tarball.  Note which files have been
+       renamed.  Note that erc-list is enabled by default, except in
+       Emacs 22.
+
+       * README.extras: New file which serves as a README for the extras
+       tarball.
+
+2007-03-31  Michael Olson  <mwolson@gnu.org>
+
+       * NEWS: Update for the 5.2 release.
+
+       * FOR-RELEASE: Finish up 5.2 manual item.  Add documentation item
+       for 5.3.
+
+       * erc.texi (Sample Session): Flesh out.  Mention #erc.
+       (Modules): Defer to 5.3 release.
+       (Advanced Usage): Move Sample Configuration chapter ahead of
+       unfinished chapters.
+       (Sample Configuration): Write.
+       (Options): Mention how to see available ERC options.  Defer to 5.3
+       release.
+       (Tips and Tricks): Remove, since it seems better to just include
+       tips and tricks in the sample configuration, commented out.
+
+       * erc-bbdb.el (erc-bbdb-search-name-and-create): Make prompt more
+       informative about how to skip merging.
+       (erc-bbdb-insinuate-and-show-entry-1): Move contents of
+       erc-bbdb-insinuate-and-show-entry here.
+       (erc-bbdb-insinuate-and-show-entry): Run
+       erc-bbdb-insinuate-and-show-entry-1 "outside" of the calling
+       function, so that we can avoid triggering a process-filter error
+       if the user hits C-g.
+
+2007-03-30  Michael Olson  <mwolson@gnu.org>
+
+       * FOR-RELEASE: Solve C-c C-SPC keybinding dilemma.
+
+       * erc-autoaway.el (erc-autoaway-idle-method): Use `if' rather than
+       `cond' and `set' rather than `set-default'.
+
+       * erc-log.el: Avoid compiler warning by requiring erc-network
+       during compilation.
+       (erc-generate-log-file-name-function): Add tag to each option.
+       Add erc-generate-log-file-name-network.
+       (erc-generate-log-file-name-network): New function which generates
+       a log file name that uses network name rather than server name,
+       when possible.
+
+       * erc-track.el (track): Assimilate track-when-inactive module,
+       since there's no need to have two modules in one file -- an option
+       will do.  Remove track-modified-channels alias.  Call
+       erc-track-minor-mode-maybe, and tear down the minor mode when
+       disabling.
+       (erc-track-when-inactive): New option which determines whether to
+       track visible buffers when inactive.  The default is not to do so.
+       (erc-track-visibility): Mention erc-track-when-inactive.
+       (erc-buffer-visible): Use erc-track-when-inactive.
+       (erc-track-enable-keybindings): New option which determines
+       whether to enable the global-level tracking keybindings.  The
+       default is to do so, unless they would override another binding,
+       in which case we prompt the user about it.
+       (erc-track-minor-mode-map): Move global keybindings here.
+       (erc-track-minor-mode): New minor mode which only enables the
+       keybindings and does nothing else.
+       (erc-track-minor-mode-maybe): New function which starts
+       erc-track-minor-mode, but only if it hasn't already been started,
+       an ERC buffer exists, and the user OK's it, depending on the value
+       of `erc-track-enable-keybindings'.
+       (erc-track-switch-buffer): Display a message if someone calls this
+       without first enabling erc-track-mode.
+
+2007-03-17  Michael Olson  <mwolson@gnu.org>
+
+       * erc.texi (Development): Mention ErcDevelopment page on
+       emacswiki.
+       (Getting Started): Mention ~/.emacs.d/.ercrc.el and the Customize
+       interface.
+       (Sample Session): New section that has a very rough draft for a
+       sample ERC session.
+       (Special Features): New section that explains some of the special
+       features of ERC.  Taken from ErcFeatures on emacswiki, with
+       enhancements.
+
+2007-03-12  Diane Murray  <disumu@x3y2z1.net>
+
+       * erc-autoaway.el (erc-autoaway-idle-method): When setting the new
+       value, disable and re-enable `erc-autoaway-mode' only if it was
+       already enabled.  This fixes a bug where autoaway was enabled just
+       by loading the file.
+
+2007-03-10  Diane Murray  <disumu@x3y2z1.net>
+
+       * erc-capab.el: Added more information to the Usage section.
+       (erc-capab-identify-prefix): Doc fix.
+       (erc-capab-identify-unidentified): New face.
+       (290): Removed.  Definition moved to erc-backend.el.
+       (erc-capab-identify-send-messages): Renamed from
+       `erc-capab-send-identify-messages'.
+       (erc-capab-identify-setup): Use it.
+       (erc-capab-identify-get-unidentified-nickname): Renamed from
+       `erc-capab-get-unidentified-nickname'.
+       (erc-capab-identify-add-prefix): Use it.  Use
+       `erc-capab-identify-unidentified' as the face.
+
+       * erc-backend.el (290): Moved here from erc-capab.el.
+
+       * erc.el (erc-select): Added an autoload cookie.
+       (erc-message-type-member, erc-restore-text-properties): Use
+       `erc-get-parsed-vector'.
+       (erc-auto-query): Set the default to 'bury since many new users
+       expect private messages from others to be in dedicated query
+       buffers, not the server buffer.
+       (erc-common-server-suffixes): Use "freenode" for freenode.net, not
+       "OPN".  Added oftc.net.
+
+       * NEWS: Added note about erc-auto-query's new default setting.
+
+2007-03-03  Michael Olson  <mwolson@gnu.org>
+
+       * erc.el (erc-open, erc): Docfixes.
+
+2007-03-02  Michael Olson  <mwolson@gnu.org>
+
+       * FOR-RELEASE: Make section for 5.3 release and move erc-backend
+       cleanup there.  Awaiting discussion before doing other things.
+       Add tasks for merging filename changes from the 5.2 release
+       branch, and for making a tarball of modules not in Emacs 22.  Add
+       item to remind me to update NEWS.  Mark backtab entry as done.
+
+       * erc-button.el (button): Add call to `erc-button-add-keys'.
+       (erc-button-keys-added): New variable tracking whether we've added
+       the keys yet.
+       (erc-button-add-keys): New function that adds the <backtab> key to
+       erc-mode-map.
+
+       * erc.texi: Change version to 5.2 (pre-release).
+
+2007-02-15  Michael Olson  <mwolson@gnu.org>
+
+       * CREDITS: Update.
+
+       * erc-backend.el (erc-server-send-ping-interval): Change to use a
+       default of 30 seconds.  Improve customize interface.
+       (erc-server-send-ping-timeout): New option that determines when to
+       consider a connection stalled and restart it.  The default is
+       after 120 seconds.
+       (erc-server-send-ping): Use erc-server-send-ping-timeout instead
+       of erc-server-send-ping-interval.  If
+       erc-server-send-ping-timeout is nil, do not ever kill and restart
+       a hung IRC process.
+
+       * erc.el (erc-modules): Include the name of the module in its
+       description.  This should make it easier for people to find and
+       enable a particular module.
+
+2007-02-15  Vivek Dasmohapatra  <vivek@etla.org>
+
+       * erc.el (erc-cmd-RECONNECT): Kill old process if it is still
+       alive.
+       (erc-message-english-PART): Properly escape "%" characters in
+       reason.
+
+       * erc-backend.el (erc-server-reconnecting): New variable that is
+       set when the user requests a reconnect, but the old process is
+       still alive.  This forces the reconnect to work even though the
+       process is killed manually during reconnect.
+       (erc-server-connect): Initialize it.
+       (erc-server-reconnect-p): Use it.
+       (erc-process-sentinel-1): Set it to nil after the first reconnect
+       attempt.
+
+2007-02-07  Diane Murray  <disumu@x3y2z1.net>
+
+       * erc-menu.el (erc-menu-definition): Fixed so that the separator
+       is between "Current channel" and "Pals, fools and other keywords",
+       not at the bottom of the "Current channel" submenu.
+
+2007-01-25  Diane Murray  <disumu@x3y2z1.net>
+
+       * erc-networks.el (erc-server-alist): Removed SSL server for now
+       since `erc-server-select' doesn't know to use `erc-ssl'.
+
+       * erc-networks.el (erc-server-alist, erc-networks-alist): Added
+       definitions for oftc.net.
+
+       * erc-services.el (erc-nickserv-alist): Fixed OFTC message regexp.
+
+2007-01-22  Michael Olson  <mwolson@gnu.org>
+
+       * erc-backend.el (erc-server-error-occurred): New variable that
+       indicates when an error has been signaled by the server.  This
+       should fix an infinite reconnect bug when giving some servers a
+       bogus :full-name.  Thanks to Angelina Carlton for the report.
+       (erc-server-connect): Initialize erc-server-error-occurred.
+       (erc-server-reconnect-p): Use it.
+       (ERROR): Set it.
+
+       * erc-services.el (erc-nickserv-alist): Alphabetize and add Ars
+       and QuakeNet.  Standardize look of entries.  Fix type mismatch
+       error in customize interface.
+       (erc-nickserv-passwords): Alphabetize and add missing entries from
+       erc-nickserv-alist.
+
+2007-01-21  Michael Olson  <mwolson@gnu.org>
+
+       * erc.el (erc-header-line-format): Document how to disable the
+       header line, and add a customization type for it.  Also, make the
+       changes take effect immediately.
+
+2007-01-19  Michael Olson  <mwolson@gnu.org>
+
+       * erc.texi (Modules): Document new menu module.  Thanks to Leo
+       for noticing.
+
+2007-01-16  Diane Murray  <disumu@x3y2z1.net>
+
+       * erc-stamp.el (erc-insert-timestamp-left): Fixed so that the
+       whitespace string filler is hidden correctly when timestamps are
+       hidden.
+       (erc-toggle-timestamps): New function to use instead of
+       `erc-show-timestamps' and `erc-hide-timestamps'.
+
+       * erc.el (erc-restore-text-properties): Moved here from
+       erc-fill.el since it could be useful in general.
+
+       * erc-fill.el (erc-restore-text-properties): Removed.
+
+2007-01-13  Michael Olson  <mwolson@gnu.org>
+
+       * erc.el (erc-command-regexp): New variable that is used to match
+       a command.
+       (erc-send-input): Use it.  This fixes a bug where paths --
+       "/usr/bin/foo", for example -- were being displayed as commands,
+       but still sent correctly.
+       (erc-extract-command-from-line): Use it.
+
+       * erc.texi (Modules): Document erc-capab-identify.
+
+2007-01-11  Diane Murray  <disumu@x3y2z1.net>
+
+       * erc.el (erc-find-parsed-property): Moved here from erc-track.el
+       since it can be useful in general.
+
+       * erc-track.el (erc-find-parsed-property): Removed.
+
+       * erc-capab.el (erc-capab-find-parsed): Removed.
+       (erc-capab-identify-add-prefix): Use `erc-find-parsed-property'.
+
+       * erc.el (erc-open): Run `erc-before-connect' hook here.  This
+       makes sure the hook always gets called before a connection is
+       made, as some functions, like `erc-handle-irc-url', use `erc-open'
+       instead of `erc'.
+       (erc): Removed `erc-before-connect' hook.
+
+       * erc-menu.el (erc-menu-definition): Put items specific to
+       channels in a "Current channel" submenu.
+
+       * erc-backend.el (321, 323): Display channel list in server buffer
+       when not using the channel list module.
+
+       * erc.el: Updated copyright years.
+       (erc-version-string): Set to 5.2 (devel).
+       (erc-format-lag-time): Fixed to work when `erc-server-lag' is nil.
+       (erc-update-mode-line-buffer): Set the header face.
+
+2007-01-11  Michael Olson  <mwolson@gnu.org>
+
+       * erc-bbdb.el (erc-bbdb-popup-type): Fix customization type and
+       documentation.
+
+       * erc-services.el (erc-nickserv-identify-mode): Improve
+       documentation for nick-change option and move higher to fix
+       compiler warning.  Avoid a recursive load error.
+       (erc-nickserv-alist): Add simple entry for BitlBee, to avoid
+       "NickServ is AWAY: User is offline" error.  Oddly enough, bitlbee
+       was smart enough to recognize that as an authentication request
+       and log in regardless, which is why I didn't notice this earlier.
+       (erc-nickserv-alist-sender, erc-nickserv-alist-regexp)
+       (erc-nickserv-alist-nickserv, erc-nickserv-alist-ident-keyword)
+       (erc-nickserv-alist-use-nick-p)
+       (erc-nickserv-alist-ident-command): New accessors for
+       erc-nickserv-alist.  Using nth is unwieldy.
+       (erc-nickserv-identify-autodetect)
+       (erc-nickserv-identify-on-connect)
+       (erc-nickserv-identify-on-nick-change, erc-nickserv-identify): Use
+       the new accessors.
+
+2007-01-11  Diane Murray  <disumu@x3y2z1.net>
+
+       * NEWS: Added note for `erc-my-nick-face'.  Fixed capab-identify
+       wording.
+
+2007-01-10  Diane Murray  <disumu@x3y2z1.net>
+
+       * erc.el (erc-mode-line-format): Added %l to documentation.
+       (erc-header-line-format): Removed "[IRC]".  Use the new %l
+       replacement character.  Doc fix.
+       (erc-format-channel-modes): Removed lag code.  Removed parentheses
+       from mode string.
+       (erc-format-lag-time): New function.
+       (erc-update-mode-line-buffer): Use it.
+
+2007-01-10  Michael Olson  <mwolson@gnu.org>
+
+       * erc.el: Fix typo in url-irc-function instructions.
+
+2007-01-09  Michael Olson  <mwolson@gnu.org>
+
+       * erc.el (erc-system-name): New option that determines the system
+       name to use when logging in.  The default is to figure this out by
+       calling `system-name'.
+       (erc-login): Use it.
+
+2007-01-07  Michael Olson  <mwolson@gnu.org>
+
+       * erc.el (erc-modules): Add the menu module.  This should fix a
+       bug with incorrect ERC submenus being displayed.
+
+       * erc-menu.el: Turn this into a module.
+       (erc-menu-add, erc-menu-remove): New functions that add and remove
+       the ERC menu.
+
+
+See ChangeLog.06 for earlier changes.
+
+    Copyright (C) 2007 Free Software Foundation, Inc.
+
+  This file is part of GNU Emacs.
+
+  GNU Emacs 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 2, or (at your option)
+  any later version.
+
+  GNU Emacs 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 GNU Emacs; see the file COPYING.  If not, write to the
+  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+  Boston, MA 02110-1301, USA.
+
+;; Local Variables:
+;; coding: utf-8
+;; add-log-time-zone-rule: t
+;; End:
+
+;; arch-tag: 3369b6e5-96b1-4b32-96cd-9a905c747496
similarity index 85%
copy from lisp/erc/ChangeLog
copy to lisp/erc/ChangeLog.06
index 62e7eaa..f7d891c 100644 (file)
@@ -1,94 +1,3 @@
-2007-01-13  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-command-regexp): New variable that is used to match
-       a command.
-       (erc-send-input): Use it.  This fixes a bug where paths --
-       "/usr/bin/foo", for example -- were being displayed as commands,
-       but still sent correctly.
-       (erc-extract-command-from-line): Use it.
-
-       * erc.texi (Modules): Document erc-capab-identify.
-
-2007-01-11  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc.el (erc-find-parsed-property): Moved here from erc-track.el
-       since it can be useful in general.
-
-       * erc-track.el (erc-find-parsed-property): Removed.
-
-       * erc-capab.el (erc-capab-find-parsed): Removed.
-       (erc-capab-identify-add-prefix): Use `erc-find-parsed-property'.
-
-       * erc.el (erc-open): Run `erc-before-connect' hook here.  This
-       makes sure the hook always gets called before a connection is
-       made, as some functions, like `erc-handle-irc-url', use `erc-open'
-       instead of `erc'.
-       (erc): Removed `erc-before-connect' hook.
-
-       * erc-menu.el (erc-menu-definition): Put items specific to
-       channels in a "Current channel" submenu.
-
-       * erc-backend.el (321, 323): Display channel list in server buffer
-       when not using the channel list module.
-
-       * erc.el: Updated copyright years.
-       (erc-version-string): Set to 5.2 (devel).
-       (erc-format-lag-time): Fixed to work when `erc-server-lag' is nil.
-       (erc-update-mode-line-buffer): Set the header face.
-
-2007-01-11  Michael Olson  <mwolson@gnu.org>
-
-       * erc-bbdb.el (erc-bbdb-popup-type): Fix customization type and
-       documentation.
-
-       * erc-services.el (erc-nickserv-identify-mode): Improve
-       documentation for nick-change option and move higher to fix
-       compiler warning.  Avoid a recursive load error.
-       (erc-nickserv-alist): Add simple entry for BitlBee, to avoid
-       "NickServ is AWAY: User is offline" error.  Oddly enough, bitlbee
-       was smart enough to recognize that as an authentication request
-       and log in regardless, which is why I didn't notice this earlier.
-       (erc-nickserv-alist-sender, erc-nickserv-alist-regexp)
-       (erc-nickserv-alist-nickserv, erc-nickserv-alist-ident-keyword)
-       (erc-nickserv-alist-use-nick-p)
-       (erc-nickserv-alist-ident-command): New accessors for
-       erc-nickserv-alist.  Using nth is unwieldy.
-       (erc-nickserv-identify-autodetect)
-       (erc-nickserv-identify-on-connect)
-       (erc-nickserv-identify-on-nick-change, erc-nickserv-identify): Use
-       the new accessors.
-
-2007-01-11  Diane Murray  <disumu@x3y2z1.net>
-
-       * NEWS: Added note for `erc-my-nick-face'.  Fixed capab-identify
-       wording.
-
-2007-01-10  Diane Murray  <disumu@x3y2z1.net>
-
-       * erc.el (erc-mode-line-format): Added %l to documentation.
-       (erc-header-line-format): Removed "[IRC]".  Use the new %l
-       replacement character.  Doc fix.
-       (erc-format-channel-modes): Removed lag code.  Removed parentheses
-       from mode string.
-       (erc-format-lag-time): New function.
-       (erc-update-mode-line-buffer): Use it.
-
-2007-01-09  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-system-name): New option that determines the system
-       name to use when logging in.  The default is to figure this out by
-       calling `system-name'.
-       (erc-login): Use it.
-
-2007-01-07  Michael Olson  <mwolson@gnu.org>
-
-       * erc.el (erc-modules): Add the menu module.  This should fix a
-       bug with incorrect ERC submenus being displayed.
-
-       * erc-menu.el: Turn this into a module.
-       (erc-menu-add, erc-menu-remove): New functions that add and remove
-       the ERC menu.
-
 2006-12-28  Michael Olson  <mwolson@gnu.org>
 
        * erc-list.el: Change header to mention that this is part of ERC,
        * erc.texi (Getting Started, Connecting): Changed erc-select to
        erc.
 
-       * NEWS: Added note about these changes.
+       * README: Changed erc-select to erc.
 
-2006-08-20  Diane Murray  <disumu@x3y2z1.net>
+       * NEWS: Added note about these changes.
 
-       * erc-backend.el (erc-process-sentinel-1): Doc fix.  Let
-       `erc-server-reconnect-p' check all condition cases.
-       (erc-server-reconnect-p): Moved rest of checks from
-       `erc-process-sentinel-1' to here.  Now takes an argument, EVENT.
+       * FOR-RELEASE: Marked this item as done.
 
 2006-08-21  Diane Murray  <disumu@x3y2z1.net>
 
 
 2006-08-20  Michael Olson  <mwolson@gnu.org>
 
+       * erc-identd.el (erc-identd): New customization group.
+       (erc-identd-port): New option that specifies the port to use if
+       none is given as an argument to erc-identd-start.
+       (identd): Place erc-identd-quickstart in erc-connect-pre-hook
+       instead of erc-identd-start so that we deal with the different
+       meaning of the first argument.
+       (erc-identd-start): Use erc-identd-port.
+       (erc-identd-quickstart): New function that ignores any arguments
+       and calls erc-identd-start.
+
        * erc.el (erc-with-server-buffer): New macro that switches to the
        current ERC server buffer and runs some code.  If no server buffer
        is available, return nil.  This is a useful way to access
        variables in the server buffer.
+       (erc-get-server-user, erc-add-server-user)
+       (erc-remove-server-user, erc-change-user-nickname)
+       (erc-get-server-nickname-list, erc-get-server-nickname-alist)
+       (erc-ison-p, erc-active-buffer, erc-cmd-IGNORE)
+       (erc-cmd-UNIGNORE, erc-cmd-IDLE, erc-cmd-NICK, erc-cmd-BANLIST)
+       (erc-cmd-MASSUNBAN, erc-nickname-in-use, erc-ignored-user-p)
+       (erc-format-channel-modes): Use it.
+       (erc-once-with-server-event, erc-once-with-server-event-global)
+       (erc-with-buffer, erc-with-all-buffers-of-server): Use make-symbol
+       instead of gensym.
        (erc-open-server-buffer-p): New function that returns non-nil if
        the given buffer is an ERC server buffer that has an open IRC
        process.
+       (erc-with-buffer): Use buffer-live-p here to set a good example,
+       though it isn't really needed here.
+       (erc-away): Mention erc-away-time.
+       (erc): Don't propagate the erc-away setting, since it makes more
+       sense to access it from the server buffer.  Set up the prompt
+       before connecting rather than after.  Run erc-connect-pre-hook
+       with the buffer as an argument, instead of no arguments.
+       (erc-cmd-GAWAY): Use erc-open-server-buffer-p instead of
+       erc-server-buffer-p so that only open connections are set away.
+       (erc-cmd-GQUIT): Use erc-open-server-buffer-p.
+       (erc-process-away): Docfix.  Don't set erc-away in channel
+       buffers.
+       (erc-set-current-nick): Make this uniform with the style used in
+       erc-current-nick.
+       (erc-away-time): Rename from erc-away-p, since this is no longer a
+       boolean-style predicate.
+       (erc-format-away-status): Use it.
+       (erc-initialize-log-marker): Accept a `buffer' argument.
+       (erc-connect-pre-hook): Docfix.
+       (erc-connection-established): Make sure this runs in the correct
+       buffer.
+       (erc-set-initial-user-mode): Accept a `buffer' argument.
+
+       * erc-stamp.el (erc-add-timestamp): Use erc-away-time.
+
+       * erc-spelling.el (erc-spelling-init): Use
+       erc-with-server-buffer.  Accept `buffer' argument.
+       (spelling): Call erc-spelling-init with the `buffer' argument.
+
+       * erc-speedbar.el (erc-speedbar-buttons): Use erc-server-buffer-p.
+
+       * erc-pcomplete.el (pcomplete/erc-mode/UNIGNORE)
+       (pcomplete-erc-all-nicks): Use erc-with-server-buffer.
+
+       * erc-notify.el (erc-notify-timer, erc-cmd-NOTIFY): Use
+       erc-with-server-buffer.
+
+       * erc-networks.el (erc-network, erc-current-network)
+       (erc-network-name): Use erc-with-server-buffer.
+
+       * erc-netsplit.el (erc-cmd-WHOLEFT): Use erc-with-server-buffer.
+
+       * erc-match.el (erc-log-matches, erc-log-matches-come-back): Use
+       erc-away-time.
+
+       * erc-log.el (log): Use erc-away-time.  Remove unnecessary check.
+       Pass `buffer' argument to erc-log-setup-logging instead of setting
+       the current buffer.  Ditto for erc-log-disable-logging.
+       (erc-log-setup-logging, erc-log-disable-loggin): Accept a `buffer'
+       argument.
+
+       * erc-list.el (erc-chanlist): Use erc-with-server-buffer.
+
+       * erc-ibuffer.el (erc-away): Use erc-away-time.
+
+       * erc-dcc.el (erc-dcc-get-filter): Temporarily make the buffer
+       read only instead of permanently doing so.
+
+       * erc-compat.el (erc-gensym, *erc-sym-counter*): Remove, since
+       Emacs Lisp has make-symbol, which is better.
+
+       * erc-chess.el (erc-chess-handler, erc-cmd-CHESS): Use
+       erc-with-server-buffer.
+
+       * erc-capab.el (capab-identify): Only deal with server buffers
+       that have an open IRC process.
+       (erc-capab-identify-add-prefix): Use erc-with-server-buffer.
+
+       * erc-backend.el (erc-server-connected): Docfix.  Recommend the
+       `erc-server-process-alive' function.
+       (erc-coding-system-for-target): Supply a default target if one is
+       not given.
+       (erc-server-send): Simplify slightly.
+       (erc-call-hooks): Use erc-with-server-buffer.
+       (erc-server-connect, erc-server-setup-periodical-ping): Accept
+       `buffer' argument.
+
+       * erc-autoaway.el (erc-autoaway-reestablish-idletimer): Move
+       higher to avoid an automatic load snafu.
+       (erc-autoaway-some-server-buffer): New function that returns an
+       ERC server buffer with a live connection, or nil otherwise.
+       (erc-autoaway-insinuate-maybe): New function that adds the
+       autoaway reset function to post-command-hook if at least one ERC
+       process is alive.
+       (erc-autoaway-remove-maybe): New function that removes the
+       autoaway reset function from post-command-hook if no ERC process
+       is alive.
+       (autoaway): Don't touch post-command-hook unless an IRC process is
+       already open.  Remove our addition to post-command-hook as soon as
+       there are no more IRC processes open.  Reset the indicators before
+       connecting to an IRC server, which fixes a bug when re-connecting.
+       (erc-autoaway-reset-idle-user): Call erc-autoaway-remove-maybe if
+       there are no more IRC processes open.
+       (erc-autoaway-set-back): Pick an open IRC process.  Accept an
+       argument which is a function call if we can't find one.
+       (erc-autoaway-some-open-server-buffer): New function which returns
+       an ERC server buffer with an open connection and a user that is
+       not away.
+       (erc-autoaway-possibly-set-away, erc-autoaway-set-away): Use it.
+       (erc-autoaway-set-away): Accept a `notest' argument which is used
+       to avoid testing the same thing twice.
+       (erc-autoaway-last-sent-time, erc-autoaway-caused-away): Move
+       higher in file to fix byte-compile warning.
+
+2006-08-20  Diane Murray  <disumu@x3y2z1.net>
+
+       * erc-backend.el (erc-process-sentinel-1): Doc fix.  Let
+       `erc-server-reconnect-p' check all condition cases.
+       (erc-server-reconnect-p): Moved rest of checks from
+       `erc-process-sentinel-1' to here.  Now takes an argument, EVENT.
 
 2006-08-14  Diane Murray  <disumu@x3y2z1.net>
 
        * erc-match.el (erc-log-matches-make-buffer): End `y-or-n-p'
        prompt with a space.
 
+2006-08-13  Michael Olson  <mwolson@gnu.org>
+
+       * erc-backend.el (erc-server-timed-out): New variable that
+       indicates whether the current connection has timed out due to
+       failure to respond to a ping.
+       (erc-server-send-ping): Set erc-server-timed-out to t.
+       (erc-server-connect): Initialize erc-server-timed-out to nil.
+       (erc-process-sentinel-1): Consult erc-server-timed-out.
+
 2006-08-11  Michael Olson  <mwolson@gnu.org>
 
        * erc-fill.el (erc-fill): Skip any initial empty lines so that we
        (english): Add 'finished and 'terminated entries to the catalog.
        Add initial and terminal newlines to 'disconnected and
        'disconnected-noreconnect entries.  Avoid long lines.
+       (erc-cmd-QUIT): Bind the current erc-server-process to
+       server-proc.  If the IRC server responds quickly, it is possible
+       for the connection to close, and hence server buffer to be killed,
+       if erc-kill-server-buffer-on-quit is non-nil.  This avoids that
+       problem.
 
 2006-08-06  Michael Olson  <mwolson@gnu.org>
 
        * erc-backend.el (erc-server-send-queue): Update from Circe
        version of this function.
+       (erc-server-ping-timer-alist): New variable that keeps track of
+       ping timers according to their associated server.
+       (erc-server-last-received-time): New variable that specifies the
+       time of the last message we received from the server.  This is
+       used to detect hung processes.
+       (erc-server-send-ping): New function that sends a ping to the IRC
+       process corresponding with the given buffer.  Split from
+       erc-server-setup-periodical-ping.  If the server buffer no longer
+       exists, cancel the timer.  If the server process has not given us
+       a message, including PING responses, since the last PING, kill it.
+       This is necessary to deal with some aberrant freenode behavior.
+       Idea taken from rcirc.
+       (erc-server-setup-periodical-ping): Rename from
+       erc-server-setup-periodical-server-ping.
+       (erc-server-filter-function): Use erc-current-time instead of
+       current-time.
 
        * erc.el (erc-arrange-session-in-multiple-windows): Fix bug with
        multi-tty Emacs.
        (erc-select-startup-file): Fix bug introduced by recent change.
+       (erc-cmd-QUIT): If the IRC process has not terminated itself
+       within 4 seconds of completing our quit-hook, kill it manually.
+       Freenode in particular needs this.
+       (erc-connection-established): Use erc-server-setup-periodical-ping
+       instead of erc-server-setup-periodical-server-ping.
 
 2006-08-05  Michael Olson  <mwolson@gnu.org>
 
 
 2006-07-05  Michael Olson  <mwolson@gnu.org>
 
-       * erc.el (erc-modules): Add the `page' module to the list.
+       * erc.el (erc-modules): Use `set' instead of `set-default', since
+       this setting should never be buffer-local.  Add the `page' module
+       to the list.
 
        * erc.texi (Modules): Add entries for `list' and `page' modules.
        Change "spell" to "spelling".
        explicitly load every module.
        (History): Update.
 
-       * erc.el (erc-version-modules): Remove, since we do not use this
-       function anymore.
+       * erc-autoaway.el, erc-join.el, erc-backend.el, erc-bbdb.el:
+       erc-button.el, erc-chess.el, erc-compat.el, erc-hecomplete.el:
+       erc-dcc.el, erc-ezbounce.el, erc-fill.el, erc-ibuffer.el:
+       erc-imenu.el, erc-list.el, erc-log.el, erc-match.el, erc-menu.el:
+       erc-networks.el, erc-netsplit.el, erc-nicklist.el:
+       erc-services.el, erc-pcomplete.el, erc-replace.el, erc-ring.el:
+       erc-speedbar.el, erc-spelling.el, erc-stamp.el, erc-track.el:
+       erc.el: Remove version strings.
+
+       * erc.el (erc-cmd-SMV): Remove, since we do not have meaningful
+       module versions anymore.
+       (erc-version-modules): Remove, since we do not use this function
+       anymore.
        (erc-latest-version, erc-ediff-latest-version): Remove, since this
        was only useful back when ERC consisted of one file.
        (erc-modules): Add line for identd.
        detect the existence of the `open-network-stream-nowait' function,
        since I can't find it in Emacs21, XEmacs21, or Emacs22.
 
+2006-03-27  Michael Olson  <mwolson@gnu.org>
+
+       * erc.texi: Update direntry.  Remove unneeded local variables.
+
 2006-03-26  Michael Olson  <mwolson@gnu.org>
 
        * erc.el (erc-header-line): New face that will be used to colorize
index 9d90d0a..91a1150 100644 (file)
@@ -40,6 +40,49 @@ yourself back when you type something."
   "The Emacs idletimer.
 This is only used when `erc-autoaway-idle-method' is set to 'emacs.")
 
+(defvar erc-autoaway-last-sent-time (erc-current-time)
+  "The last time the user sent something.")
+
+(defvar erc-autoaway-caused-away nil
+  "Indicates whether this module was responsible for setting the
+user's away status.")
+
+(eval-when-compile (defvar erc-autoaway-idle-seconds))
+
+(defun erc-autoaway-reestablish-idletimer ()
+  "Reestablish the Emacs idletimer.
+If `erc-autoaway-idle-method' is 'emacs, you must call this
+function each time you change `erc-autoaway-idle-seconds'."
+  (interactive)
+  (when erc-autoaway-idletimer
+    (erc-cancel-timer erc-autoaway-idletimer))
+  (setq erc-autoaway-idletimer
+       (run-with-idle-timer erc-autoaway-idle-seconds
+                            t
+                            'erc-autoaway-set-away
+                            erc-autoaway-idle-seconds)))
+
+(defun erc-autoaway-some-server-buffer ()
+  "Return some ERC server buffer if its connection is alive.
+If none is found, return nil."
+  (car (erc-buffer-list #'erc-open-server-buffer-p)))
+
+(defun erc-autoaway-insinuate-maybe (&optional server &rest ignored)
+  "Add autoaway reset function to `post-command-hook' if at least one
+ERC process is alive.
+
+This is used when `erc-autoaway-idle-method' is 'user."
+  (when (or server (erc-autoaway-some-server-buffer))
+    (add-hook 'post-command-hook 'erc-autoaway-reset-idle-user)))
+
+(defun erc-autoaway-remove-maybe (&rest ignored)
+  "Remove the autoaway reset function from `post-command-hook' if
+no ERC process is alive.
+
+This is used when `erc-autoaway-idle-method' is 'user."
+  (unless (erc-autoaway-some-server-buffer)
+    (remove-hook 'post-command-hook 'erc-autoaway-reset-idle-user)))
+
 ;;;###autoload (autoload 'erc-autoaway-mode "erc-autoaway")
 (define-erc-module autoaway nil
   "In ERC autoaway mode, you can be set away automatically.
@@ -65,24 +108,31 @@ set you no longer away.
 Related variables: `erc-public-away-p' and `erc-away-nickname'."
   ;; Enable:
   ((when (boundp 'erc-autoaway-idle-method)
+     (add-hook 'erc-connect-pre-hook 'erc-autoaway-reset-indicators)
+     (setq erc-autoaway-last-sent-time (erc-current-time))
      (cond
       ((eq erc-autoaway-idle-method 'irc)
        (add-hook 'erc-send-completed-hook 'erc-autoaway-reset-idle-irc)
        (add-hook 'erc-server-001-functions 'erc-autoaway-reset-idle-irc))
       ((eq erc-autoaway-idle-method 'user)
-       (add-hook 'post-command-hook 'erc-autoaway-reset-idle-user))
+       (add-hook 'erc-after-connect 'erc-autoaway-insinuate-maybe)
+       (add-hook 'erc-disconnected-hook 'erc-autoaway-remove-maybe)
+       (erc-autoaway-insinuate-maybe))
       ((eq erc-autoaway-idle-method 'emacs)
        (erc-autoaway-reestablish-idletimer)))
      (add-hook 'erc-timer-hook 'erc-autoaway-possibly-set-away)
      (add-hook 'erc-server-305-functions 'erc-autoaway-reset-indicators)))
   ;; Disable:
   ((when (boundp 'erc-autoaway-idle-method)
+     (remove-hook 'erc-connect-pre-hook 'erc-autoaway-reset-indicators)
      (cond
       ((eq erc-autoaway-idle-method 'irc)
        (remove-hook 'erc-send-completed-hook 'erc-autoaway-reset-idle-irc)
        (remove-hook 'erc-server-001-functions 'erc-autoaway-reset-idle-irc))
       ((eq erc-autoaway-idle-method 'user)
-       (remove-hook 'post-command-hook 'erc-autoaway-reset-idle-user))
+       (remove-hook 'post-command-hook 'erc-autoaway-reset-idle-user)
+       (remove-hook 'erc-after-connect 'erc-autoaway-insinuate-maybe)
+       (remove-hook 'erc-disconnected-hook 'erc-autoaway-remove-maybe))
       ((eq erc-autoaway-idle-method 'emacs)
        (erc-cancel-timer erc-autoaway-idletimer)
        (setq erc-autoaway-idletimer nil)))
@@ -104,9 +154,12 @@ definitions of being idle."
                 (const :tag "Emacs idle time" emacs)
                 (const :tag "Last IRC action" irc))
   :set (lambda (sym val)
-        (erc-autoaway-disable)
-        (set-default sym val)
-        (erc-autoaway-enable)))
+        (if erc-autoaway-mode
+            (progn
+              (erc-autoaway-disable)
+              (set sym val)
+              (erc-autoaway-enable))
+          (set sym val))))
 
 (defcustom erc-auto-set-away t
   "*If non-nil, set away after `erc-autoaway-idle-seconds' seconds of idling.
@@ -133,21 +186,6 @@ See `erc-auto-discard-away'."
   :group 'erc-autoaway
   :type 'regexp)
 
-(eval-when-compile (defvar erc-autoaway-idle-seconds))
-
-(defun erc-autoaway-reestablish-idletimer ()
-  "Reestablish the Emacs idletimer.
-If `erc-autoaway-idle-method' is 'emacs, you must call this
-function each time you change `erc-autoaway-idle-seconds'."
-  (interactive)
-  (when erc-autoaway-idletimer
-    (erc-cancel-timer erc-autoaway-idletimer))
-  (setq erc-autoaway-idletimer
-       (run-with-idle-timer erc-autoaway-idle-seconds
-                            t
-                            'erc-autoaway-set-away
-                            erc-autoaway-idle-seconds)))
-
 (defcustom erc-autoaway-idle-seconds 1800
   "*Number of seconds after which ERC will set you automatically away.
 If you are changing this variable using lisp instead of customizing it,
@@ -167,19 +205,12 @@ in seconds."
   :group 'erc-autoaway
   :type 'string)
 
-(defvar erc-autoaway-last-sent-time (erc-current-time)
-  "The last time the user sent something.")
-
-(defvar erc-autoaway-caused-away nil
-  "Indicates whether this module was responsible for setting the
-user's away status.")
-
 (defun erc-autoaway-reset-idle-user (&rest stuff)
   "Reset the stored user idle time.
 This is one global variable since a user talking on one net can
 talk on another net too."
   (when erc-auto-discard-away
-    (erc-autoaway-set-back))
+    (erc-autoaway-set-back #'erc-autoaway-remove-maybe))
   (setq erc-autoaway-last-sent-time (erc-current-time)))
 
 (defun erc-autoaway-reset-idle-irc (line &rest stuff)
@@ -192,12 +223,24 @@ talk on another net too."
     (erc-autoaway-set-back))
   (setq erc-autoaway-last-sent-time (erc-current-time)))
 
-(defun erc-autoaway-set-back ()
-  "Discard the away state globally."
-  (let ((server-buffer (car (erc-buffer-list #'erc-server-buffer-p))))
-    (when (and erc-autoaway-caused-away
-              (with-current-buffer server-buffer (erc-away-p)))
-      (erc-cmd-GAWAY ""))))
+(defun erc-autoaway-set-back (&optional none-alive-func)
+  "Discard the away state globally.
+
+NONE-ALIVE-FUNC is the function to call if no ERC processes are alive."
+  (let ((server-buffer (erc-autoaway-some-server-buffer)))
+    (if (and erc-autoaway-caused-away
+            (buffer-live-p server-buffer)
+            (with-current-buffer server-buffer erc-away))
+       (erc-cmd-GAWAY "")
+      (when none-alive-func (funcall none-alive-func)))))
+
+(defun erc-autoaway-some-open-server-buffer ()
+  "Return some ERC server buffer if its connection is alive and the
+user is not away.
+If none is found, return nil."
+  (car (erc-buffer-list (lambda ()
+                         (and (erc-open-server-buffer-p)
+                              (not erc-away))))))
 
 (defun erc-autoaway-possibly-set-away (current-time)
   "Set autoaway when `erc-auto-set-away' is true and the idletime is
@@ -207,7 +250,7 @@ exceeds `erc-autoaway-idle-seconds'."
   ;; whenever the server sends something to the client.
   (when (and erc-auto-set-away
             (not erc-autoaway-caused-away)
-            (not (erc-away-p)))
+            (erc-autoaway-some-open-server-buffer))
     (let ((idle-time (erc-time-diff erc-autoaway-last-sent-time
                                    current-time)))
       (when (>= idle-time erc-autoaway-idle-seconds)
@@ -215,15 +258,17 @@ exceeds `erc-autoaway-idle-seconds'."
         nil 'notice nil
         (format "Setting automatically away after %i seconds of idle-time"
                 idle-time))
-       (erc-autoaway-set-away idle-time)))))
+       (erc-autoaway-set-away idle-time t)))))
+
+(defun erc-autoaway-set-away (idle-time &optional notest)
+  "Set the away state globally.
 
-(defun erc-autoaway-set-away (idle-time)
-  "Set the away state globally."
+If NOTEST is specified, do not check to see whether there is an
+activer server buffer available."
   ;; Note that the idle timer runs, even when Emacs is inactive.  In
   ;; order to prevent flooding when we connect, we test for an
   ;; existing process.
-  (when (and (erc-server-process-alive)
-            (not (erc-away-p)))
+  (when (or notest (erc-autoaway-some-open-server-buffer))
     (setq erc-autoaway-caused-away t)
     (erc-cmd-GAWAY (format erc-autoaway-message idle-time))))
 
index fbe6f22..08cb738 100644 (file)
@@ -174,9 +174,15 @@ WALLCHOPS - supports sending messages to all operators in a channel")
 
 ;;; Server and connection state
 
+(defvar erc-server-ping-timer-alist nil
+  "Mapping of server buffers to their specific ping timer.")
+
 (defvar erc-server-connected nil
-  "Non-nil if the `current-buffer' is associated with an open IRC connection.
-This variable is buffer-local.")
+  "Non-nil if the current buffer has been used by ERC to establish
+an IRC connection.
+
+If you wish to determine whether an IRC connection is currently
+active, use the `erc-server-process-alive' function instead.")
 (make-variable-buffer-local 'erc-server-connected)
 
 (defvar erc-server-reconnect-count 0
@@ -187,10 +193,23 @@ This variable is buffer-local.")
   "Non-nil if the user requests a quit.")
 (make-variable-buffer-local 'erc-server-quitting)
 
+(defvar erc-server-reconnecting nil
+  "Non-nil if the user requests an explicit reconnect, and the
+current IRC process is still alive.")
+(make-variable-buffer-local 'erc-server-reconnecting)
+
+(defvar erc-server-timed-out nil
+  "Non-nil if the IRC server failed to respond to a ping.")
+(make-variable-buffer-local 'erc-server-timed-out)
+
 (defvar erc-server-banned nil
   "Non-nil if the user is denied access because of a server ban.")
 (make-variable-buffer-local 'erc-server-banned)
 
+(defvar erc-server-error-occurred nil
+  "Non-nil if the user triggers some server error.")
+(make-variable-buffer-local 'erc-server-error-occurred)
+
 (defvar erc-server-lines-sent nil
   "Line counter.")
 (make-variable-buffer-local 'erc-server-lines-sent)
@@ -210,6 +229,11 @@ This is useful for flood protection.")
 This is useful for flood protection.")
 (make-variable-buffer-local 'erc-server-last-ping-time)
 
+(defvar erc-server-last-received-time nil
+  "Time the last message was received from the server.
+This is useful for detecting hung connections.")
+(make-variable-buffer-local 'erc-server-last-received-time)
+
 (defvar erc-server-lag nil
   "Calculated server lag time in seconds.
 This variable is only set in a server buffer.")
@@ -387,11 +411,24 @@ protection algorithm."
 
 ;; Ping handling
 
-(defcustom erc-server-send-ping-interval 90
+(defcustom erc-server-send-ping-interval 30
   "*Interval of sending pings to the server, in seconds.
 If this is set to nil, pinging the server is disabled."
   :group 'erc-server
-  :type '(choice (const nil) (integer :tag "Seconds")))
+  :type '(choice (const :tag "Disabled" nil)
+                 (integer :tag "Seconds")))
+
+(defcustom erc-server-send-ping-timeout 120
+  "*If the time between ping and response is greater than this, reconnect.
+The time is in seconds.
+
+This must be greater than or equal to the value for
+`erc-server-send-ping-interval'.
+
+If this is set to nil, never try to reconnect."
+  :group 'erc-server
+  :type '(choice (const :tag "Disabled" nil)
+                 (integer :tag "Seconds")))
 
 (defvar erc-server-ping-handler nil
   "This variable holds the periodic ping timer.")
@@ -424,20 +461,40 @@ Currently this is called by `erc-send-input'."
     (upcase-word 1)
     (buffer-string)))
 
-(defun erc-server-setup-periodical-server-ping (&rest ignore)
-  "Set up a timer to periodically ping the current server."
-  (and erc-server-ping-handler (erc-cancel-timer erc-server-ping-handler))
-  (when erc-server-send-ping-interval
-    (setq erc-server-ping-handler
-          (run-with-timer
-           4 erc-server-send-ping-interval
-           (lambda (buf)
-             (when (buffer-live-p buf)
-               (with-current-buffer buf
-                 (erc-server-send
-                  (format "PING %.0f"
-                          (erc-current-time))))))
-           (current-buffer)))))
+(defun erc-server-send-ping (buf)
+  "Send a ping to the IRC server buffer in BUF.
+Additionally, detect whether the IRC process has hung."
+  (if (buffer-live-p buf)
+      (with-current-buffer buf
+        (if (and erc-server-send-ping-timeout
+                 (>
+                  (erc-time-diff (erc-current-time)
+                                 erc-server-last-received-time)
+                  erc-server-send-ping-timeout))
+            (progn
+              ;; if the process is hung, kill it
+              (setq erc-server-timed-out t)
+              (delete-process erc-server-process))
+          (erc-server-send (format "PING %.0f" (erc-current-time)))))
+    ;; remove timer if the server buffer has been killed
+    (let ((timer (assq buf erc-server-ping-timer-alist)))
+      (when timer
+        (erc-cancel-timer (cdr timer))
+        (setcdr timer nil)))))
+
+(defun erc-server-setup-periodical-ping (buffer)
+  "Set up a timer to periodically ping the current server.
+The current buffer is given by BUFFER."
+  (with-current-buffer buffer
+    (and erc-server-ping-handler (erc-cancel-timer erc-server-ping-handler))
+    (when erc-server-send-ping-interval
+      (setq erc-server-ping-handler (run-with-timer
+                                     4 erc-server-send-ping-interval
+                                     #'erc-server-send-ping
+                                     buffer))
+      (setq erc-server-ping-timer-alist (cons (cons buffer
+                                                    erc-server-ping-handler)
+                                              erc-server-ping-timer-alist)))))
 
 (defun erc-server-process-alive ()
   "Return non-nil when `erc-server-process' is open or running."
@@ -447,40 +504,47 @@ Currently this is called by `erc-send-input'."
 
 ;;;; Connecting to a server
 
-(defun erc-server-connect (server port)
-  "Perform the connection and login.
-We will store server variables in the current buffer."
+(defun erc-server-connect (server port buffer)
+  "Perform the connection and login using the specified SERVER and PORT.
+We will store server variables in the buffer given by BUFFER."
   (let ((msg (erc-format-message 'connect ?S server ?p port)))
     (message "%s" msg)
-    (setq erc-server-process
-          (funcall erc-server-connect-function
-                   (format "erc-%s-%s" server port)
-                   (current-buffer) server port))
-    (message "%s...done" msg))
-  ;; Misc server variables
-  (setq erc-server-quitting nil)
-  (setq erc-server-banned nil)
-  (setq erc-server-last-sent-time (erc-current-time))
-  (setq erc-server-last-ping-time (erc-current-time))
-  (setq erc-server-lines-sent 0)
-  ;; last peers (sender and receiver)
-  (setq erc-server-last-peers '(nil . nil))
-  ;; process handlers
-  (set-process-sentinel erc-server-process 'erc-process-sentinel)
-  (set-process-filter erc-server-process 'erc-server-filter-function)
-  ;; we do our own encoding and decoding
-  (when (fboundp 'set-process-coding-system)
-    (set-process-coding-system erc-server-process 'raw-text))
-  (set-marker (process-mark erc-server-process) (point))
+    (let ((process (funcall erc-server-connect-function
+                            (format "erc-%s-%s" server port)
+                            nil server port)))
+      (message "%s...done" msg)
+      ;; Misc server variables
+      (with-current-buffer buffer
+        (setq erc-server-process process)
+        (setq erc-server-quitting nil)
+        (setq erc-server-reconnecting nil)
+        (setq erc-server-timed-out nil)
+        (setq erc-server-banned nil)
+        (setq erc-server-error-occurred nil)
+        (let ((time (erc-current-time)))
+          (setq erc-server-last-sent-time time)
+          (setq erc-server-last-ping-time time)
+          (setq erc-server-last-received-time time))
+        (setq erc-server-lines-sent 0)
+        ;; last peers (sender and receiver)
+        (setq erc-server-last-peers '(nil . nil)))
+      ;; we do our own encoding and decoding
+      (when (fboundp 'set-process-coding-system)
+        (set-process-coding-system process 'raw-text))
+      ;; process handlers
+      (set-process-sentinel process 'erc-process-sentinel)
+      (set-process-filter process 'erc-server-filter-function)
+      (set-process-buffer process buffer)))
   (erc-log "\n\n\n********************************************\n")
-  (message (erc-format-message 'login ?n (erc-current-nick)))
+  (message (erc-format-message
+            'login ?n
+            (with-current-buffer buffer (erc-current-nick))))
   ;; wait with script loading until we receive a confirmation (first
   ;; MOTD line)
   (if (eq erc-server-connect-function 'open-network-stream-nowait)
       ;; it's a bit unclear otherwise that it's attempting to establish a
       ;; connection
-      (erc-display-message nil nil (current-buffer)
-                           "Opening connection..\n")
+      (erc-display-message nil nil buffer "Opening connection..\n")
     (erc-login)))
 
 (defun erc-server-reconnect ()
@@ -501,6 +565,7 @@ Make sure you are in an ERC buffer when running this."
 (defun erc-server-filter-function (process string)
   "The process filter for the ERC server."
   (with-current-buffer (process-buffer process)
+    (setq erc-server-last-received-time (erc-current-time))
     ;; If you think this is written in a weird way - please refer to the
     ;; docstring of `erc-server-processing-p'
     (if erc-server-processing-p
@@ -529,16 +594,20 @@ Make sure you are in an ERC buffer when running this."
 (defsubst erc-server-reconnect-p (event)
   "Return non-nil if ERC should attempt to reconnect automatically.
 EVENT is the message received from the closed connection process."
-  (and erc-server-auto-reconnect
-       (not erc-server-banned)
-       ;; make sure we don't infinitely try to reconnect, unless the
-       ;; user wants that
-       (or (eq erc-server-reconnect-attempts t)
-           (and (integerp erc-server-reconnect-attempts)
-                (< erc-server-reconnect-count erc-server-reconnect-attempts)))
-       (not (string-match "^deleted" event))
-       ;; open-network-stream-nowait error for connection refused
-       (not (string-match "^failed with code 111" event))))
+  (or erc-server-reconnecting
+      (and erc-server-auto-reconnect
+           (not erc-server-banned)
+           (not erc-server-error-occurred)
+           ;; make sure we don't infinitely try to reconnect, unless the
+           ;; user wants that
+           (or (eq erc-server-reconnect-attempts t)
+               (and (integerp erc-server-reconnect-attempts)
+                    (< erc-server-reconnect-count
+                       erc-server-reconnect-attempts)))
+           (or erc-server-timed-out
+               (not (string-match "^deleted" event)))
+           ;; open-network-stream-nowait error for connection refused
+           (not (string-match "^failed with code 111" event)))))
 
 (defun erc-process-sentinel-1 (event)
   "Called when `erc-process-sentinel' has decided that we're disconnecting.
@@ -562,6 +631,7 @@ Conditionally try to reconnect and take appropriate action."
         (if (erc-server-reconnect-p event)
             (condition-case err
                 (progn
+                  (setq erc-server-reconnecting nil)
                   (erc-server-reconnect)
                   (setq erc-server-reconnect-count 0))
               (error (when (integerp erc-server-reconnect-attempts)
@@ -611,6 +681,7 @@ Conditionally try to reconnect and take appropriate action."
   "Return the coding system or cons cell appropriate for TARGET.
 This is determined via `erc-encoding-coding-alist' or
 `erc-server-coding-system'."
+  (unless target (setq target (erc-default-target)))
   (or (when target
         (let ((case-fold-search t))
           (catch 'match
@@ -656,14 +727,11 @@ See `erc-server-flood-margin' for an explanation of the flood
 protection algorithm."
   (erc-log (concat "erc-server-send: " string "(" (buffer-name) ")"))
   (setq erc-server-last-sent-time (erc-current-time))
-  (let ((buf (erc-server-buffer))
-        (encoding (erc-coding-system-for-target
-                   (or target (erc-default-target)))))
+  (let ((encoding (erc-coding-system-for-target target)))
     (when (consp encoding)
       (setq encoding (car encoding)))
-    (if (and buf
-             (erc-server-process-alive))
-        (with-current-buffer buf
+    (if (erc-server-process-alive)
+        (erc-with-server-buffer
           (let ((str (concat string "\r\n")))
             (if forcep
                 (progn
@@ -903,10 +971,8 @@ Finds hooks by looking in the `erc-server-responses' hashtable."
   (let ((hook (or (erc-get-hook (erc-response.command message))
                   'erc-default-server-functions)))
     (run-hook-with-args-until-success hook process message)
-    (let ((server-buffer (erc-server-buffer)))
-      (when (buffer-live-p server-buffer)
-        (with-current-buffer server-buffer
-          (run-hook-with-args 'erc-timer-hook (erc-current-time)))))))
+    (erc-with-server-buffer
+      (run-hook-with-args 'erc-timer-hook (erc-current-time)))))
 
 (add-hook 'erc-default-server-functions 'erc-handle-unknown-server-response)
 
@@ -1062,6 +1128,7 @@ add things to `%s' instead."
 
 (define-erc-response-handler (ERROR)
   "Handle an ERROR command from the server." nil
+  (setq erc-server-error-occurred t)
   (erc-display-message
    parsed 'error nil 'ERROR
    ?s (erc-response.sender parsed) ?c (erc-response.contents parsed)))
@@ -1446,6 +1513,9 @@ A server may send more than one 005 message."
 See `erc-display-server-message'." nil
   (erc-display-server-message proc parsed))
 
+(define-erc-response-handler (290)
+  "Handle dancer-ircd CAPAB messages." nil nil)
+
 (define-erc-response-handler (301)
   "AWAY notice." nil
   (erc-display-message parsed 'notice 'active 's301
index 1fd224f..435c72b 100644 (file)
   "This mode buttonizes all messages according to `erc-button-alist'."
   ((add-hook 'erc-insert-modify-hook 'erc-button-add-buttons 'append)
    (add-hook 'erc-send-modify-hook 'erc-button-add-buttons 'append)
-   (add-hook 'erc-complete-functions 'erc-button-next))
+   (add-hook 'erc-complete-functions 'erc-button-next)
+   (add-hook 'erc-mode-hook 'erc-button-add-keys))
   ((remove-hook 'erc-insert-modify-hook 'erc-button-add-buttons)
    (remove-hook 'erc-send-modify-hook 'erc-button-add-buttons)
-   (remove-hook 'erc-complete-functions 'erc-button-next)))
+   (remove-hook 'erc-complete-functions 'erc-button-next)
+   (remove-hook 'erc-mode-hook 'erc-button-add-keys)))
 
 ;; Make XEmacs use `erc-button-face'.
 (when (featurep 'xemacs)
@@ -241,6 +243,16 @@ PAR is a number of a regexp grouping whose text will be passed to
 This syntax table should make all the legal nick characters word
 constituents.")
 
+(defvar erc-button-keys-added nil
+  "Internal variable used to keep track of whether we've added the
+global-level ERC button keys yet.")
+
+(defun erc-button-add-keys ()
+  "Add ERC mode-level button movement keys.  This is only done once."
+  (unless erc-button-keys-added
+    (define-key erc-mode-map (kbd "<backtab>") 'erc-button-previous)
+    (setq erc-button-keys-added t)))
+
 (defun erc-button-add-buttons ()
   "Find external references in the current buffer and make buttons of them.
 \"External references\" are things like URLs, as
index 268c4bf..b7ccade 100644 (file)
 ;; (erc-capab-identify-mode 1)
 
 ;; `erc-capab-identify-prefix' will now be added to the beginning of
-;; unidentified users' nicknames.  The default is an asterisk, "*".  If
-;; the value of this variable is nil or you disable this module (see
+;; unidentified users' nicknames.  The default is an asterisk, "*".
+;; You can customize the prefix and the face used to display it,
+;; `erc-capab-identify-unidentified'.  If the value of
+;; `erc-capab-identify-prefix' is nil or you disable this module (see
 ;; `erc-capab-identify-disable'), no prefix will be inserted, but the
 ;; flag sent by the server will still be stripped.
 
   :group 'erc)
 
 (defcustom erc-capab-identify-prefix "*"
-  "The prefix used for unidentified users."
+  "The prefix used for unidentified users.
+
+If you change this from the default \"*\", be sure to use a
+character not found in IRC nicknames to avoid confusion."
   :group 'erc-capab
   :type '(choice string (const nil)))
 
-;;; Define module:
+(defface erc-capab-identify-unidentified '((t)) ; same as `erc-default-face'
+  "Face to use for `erc-capab-identify-prefix'."
+  :group 'erc-capab
+  :group 'erc-faces)
 
-(define-erc-response-handler (290)
-  "Handle dancer-ircd CAPAB messages." nil nil)
+;;; Define module:
 
 ;;;###autoload (autoload 'erc-capab-identify-mode "erc-capab" nil t)
 (define-erc-module capab-identify nil
@@ -124,9 +131,9 @@ Optional argument PARSED is the current message, a response struct.
 These arguments are sent to this function when called as a hook in
 `erc-server-005-functions'."
   (unless erc-capab-identify-sent
-    (erc-capab-send-identify-messages)))
+    (erc-capab-identify-send-messages)))
 
-(defun erc-capab-send-identify-messages ()
+(defun erc-capab-identify-send-messages ()
   "Send CAPAB IDENTIFY messages if the server supports it."
   (when (and (stringp erc-server-version)
              (string-match "^\\(dancer-ircd\\|hyperion\\)" erc-server-version)
@@ -175,7 +182,7 @@ PARSED is an `erc-parsed' response struct."
   (when (and erc-capab-identify-prefix
              (erc-with-server-buffer erc-capab-identify-activated))
     (goto-char (or (erc-find-parsed-property) (point-min)))
-    (let ((nickname (erc-capab-get-unidentified-nickname
+    (let ((nickname (erc-capab-identify-get-unidentified-nickname
                      (erc-get-parsed-vector (point)))))
       (when (and nickname
                  (goto-char (point-min))
@@ -183,10 +190,9 @@ PARSED is an `erc-parsed' response struct."
                  (re-search-forward (regexp-quote nickname) nil t))
         (goto-char (match-beginning 0))
         (insert (erc-propertize erc-capab-identify-prefix
-                                'face (get-char-property (- (point) 1)
-                                                         'face)))))))
+                                'face 'erc-capab-identify-unidentified))))))
 
-(defun erc-capab-get-unidentified-nickname (parsed)
+(defun erc-capab-identify-get-unidentified-nickname (parsed)
   "Return the nickname of the user if unidentified.
 PARSED is an `erc-parsed' response struct."
   (when (and (erc-response-p parsed)
index 60cbe99..dcfcfe8 100644 (file)
@@ -161,14 +161,6 @@ avoid corrupting the original SEQ."
        (setq newseq (cons el newseq))))
     (nreverse newseq)))
 
-;; Provide a simpler replacement for `gensym'.
-(defvar *erc-sym-counter* 0)
-(defun erc-gensym ()
-  "Generate a new uninterned symbol."
-  (let ((num (prog1 *erc-sym-counter*
-              (setq *erc-sym-counter* (1+ *erc-sym-counter*)))))
-    (make-symbol (format "*erc-sym-%d*" num))))
-
 ;; Copied from cl-extra.el
 (defun erc-subseq (seq start &optional end)
   "Return the subsequence of SEQ from START to END.
index 26ca86f..fc1c71b 100644 (file)
@@ -1,6 +1,7 @@
 ;;; erc-fill.el --- Filling IRC messages in various ways
 
-;; Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2006,
+;;   2007 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <asf@void.at>
 ;;         Mario Lang <mlang@delysid.org>
@@ -187,14 +188,6 @@ You can put this on `erc-insert-modify-hook' and/or `erc-send-modify-hook'."
       (length (format-time-string erc-timestamp-format))
     0))
 
-(defun erc-restore-text-properties ()
-  "Restore the property 'erc-parsed for the region."
-  (let* ((parsed-posn (text-property-not-all (point-min) (point-max)
-                                             'erc-parsed nil))
-         (parsed-prop (when parsed-posn
-                        (get-text-property parsed-posn 'erc-parsed))))
-    (put-text-property (point-min) (point-max) 'erc-parsed parsed-prop)))
-
 (provide 'erc-fill)
 
 ;;; erc-fill.el ends here
index 5266d83..25ad131 100644 (file)
 (define-ibuffer-column erc-away (:name "A")
   (if (and erc-server-process
           (processp erc-server-process)
-          (with-current-buffer (process-buffer erc-server-process)
-            erc-away))
+          (erc-away-time))
       "A"
     " "))
 
index c7f7c61..8a70a74 100644 (file)
 
 (defvar erc-identd-process nil)
 
+(defgroup erc-identd nil
+  "Run a local identd server."
+  :group 'erc)
+
+(defcustom erc-identd-port 8113
+  "Port to run the identd server on if not specified in the argument for
+`erc-identd-start'.
+
+This can be either a string or a number."
+  :group 'erc-identd
+  :type '(choice (const :tag "None" nil)
+                (integer :tag "Port number")
+                (string :tag "Port string")))
+
 ;;;###autoload (autoload 'erc-identd-mode "erc-identd")
 (define-erc-module identd nil
   "This mode launches an identd server on port 8113."
-  ((add-hook 'erc-connect-pre-hook 'erc-identd-start)
+  ((add-hook 'erc-connect-pre-hook 'erc-identd-quickstart)
    (add-hook 'erc-disconnected-hook 'erc-identd-stop))
-  ((remove-hook 'erc-connect-pre-hook 'erc-identd-start)
+  ((remove-hook 'erc-connect-pre-hook 'erc-identd-quickstart)
    (remove-hook 'erc-disconnected-hook 'erc-identd-stop)))
 
 (defun erc-identd-filter (proc string)
@@ -71,12 +85,11 @@ run from inetd.  The idea is to provide a simple identd server
 when you need one, without having to install one globally on your
 system."
   (interactive (list (read-string "Serve identd requests on port: " "8113")))
-  (if (null port)
-      (setq port 8113)
-    (if (stringp port)
-       (setq port (string-to-number port))))
-  (if erc-identd-process
-      (delete-process erc-identd-process))
+  (unless port (setq port erc-identd-port))
+  (when (stringp port)
+    (setq port (string-to-number port)))
+  (when erc-identd-process
+    (delete-process erc-identd-process))
   (setq erc-identd-process
        (make-network-process :name "identd"
                              :buffer nil
@@ -85,6 +98,11 @@ system."
                              :filter 'erc-identd-filter))
   (set-process-query-on-exit-flag erc-identd-process nil))
 
+(defun erc-identd-quickstart (&rest ignored)
+  "Start the identd server with the default port.
+The default port is specified by `erc-identd-port'."
+  (erc-identd-start))
+
 ;;;###autoload
 (defun erc-identd-stop (&rest ignore)
   (interactive)
index 22c9b36..9801192 100644 (file)
@@ -85,7 +85,9 @@
 ;;; Code:
 
 (require 'erc)
-(eval-when-compile (require 'cl))
+(eval-when-compile
+  (require 'erc-networks)
+  (require 'cl))
 
 (defgroup erc-log nil
   "Logging facilities for ERC."
@@ -100,10 +102,12 @@ NICK is the current nick,
 SERVER and PORT are the parameters used to connect BUFFERs
 `erc-server-process'."
   :group 'erc-log
-  :type '(choice (const erc-generate-log-file-name-long)
-                (const erc-generate-log-file-name-short)
-                (const erc-generate-log-file-name-with-date)
-                (symbol)))
+  :type '(choice (const :tag "Long style" erc-generate-log-file-name-long)
+                (const :tag "Long, but with network name rather than server"
+                       erc-generate-log-file-name-network)
+                (const :tag "Short" erc-generate-log-file-name-short)
+                (const :tag "With date" erc-generate-log-file-name-with-date)
+                (symbol :tag "Other function")))
 
 (defcustom erc-truncate-buffer-on-save nil
   "Truncate any ERC (channel, query, server) buffer when it is saved."
@@ -197,7 +201,7 @@ also be a predicate function. To only log when you are not set away, use:
 \(setq erc-enable-logging
       (lambda (buffer)
        (with-current-buffer buffer
-         (not erc-away))))"
+         (null (erc-away-time)))))"
   ;; enable
   ((when erc-log-write-after-insert
      (add-hook 'erc-insert-post-hook 'erc-save-buffer-in-logs))
@@ -211,8 +215,7 @@ also be a predicate function. To only log when you are not set away, use:
    ;; append, so that 'erc-initialize-log-marker runs first
    (add-hook 'erc-connect-pre-hook 'erc-log-setup-logging 'append)
    (dolist (buffer (erc-buffer-list))
-     (when (buffer-live-p buffer)
-       (with-current-buffer buffer (erc-log-setup-logging)))))
+     (erc-log-setup-logging buffer)))
   ;; disable
   ((remove-hook 'erc-insert-post-hook 'erc-save-buffer-in-logs)
    (remove-hook 'erc-send-post-hook 'erc-save-buffer-in-logs)
@@ -223,30 +226,38 @@ also be a predicate function. To only log when you are not set away, use:
    (remove-hook 'erc-part-hook 'erc-conditional-save-buffer)
    (remove-hook 'erc-connect-pre-hook 'erc-log-setup-logging)
    (dolist (buffer (erc-buffer-list))
-     (when (buffer-live-p buffer)
-       (with-current-buffer buffer (erc-log-disable-logging))))))
+     (erc-log-disable-logging buffer))))
 
 (define-key erc-mode-map "\C-c\C-l" 'erc-save-buffer-in-logs)
 
 ;;; functionality referenced from erc.el
-(defun erc-log-setup-logging ()
+(defun erc-log-setup-logging (buffer)
   "Setup the buffer-local logging variables in the current buffer.
-This function is destined to be run from `erc-connect-pre-hook'."
-  (when (erc-logging-enabled)
-    (auto-save-mode -1)
-    (setq buffer-file-name nil)
-    (set (make-local-variable 'write-file-functions)
-        '(erc-save-buffer-in-logs))
-    (when erc-log-insert-log-on-open
-      (ignore-errors (insert-file-contents (erc-current-logfile))
-                    (move-marker erc-last-saved-position
-                                 (1- (point-max)))))))
-
-(defun erc-log-disable-logging ()
-  "Disable logging in the current buffer."
-  (when (erc-logging-enabled)
-    (setq buffer-offer-save nil
-         erc-enable-logging nil)))
+This function is destined to be run from `erc-connect-pre-hook'.
+The current buffer is given by BUFFER."
+  (when (erc-logging-enabled buffer)
+    (with-current-buffer buffer
+      (auto-save-mode -1)
+      (setq buffer-file-name nil)
+      (cond ((boundp 'write-file-functions)
+            (set (make-local-variable 'write-file-functions)
+                 '(erc-save-buffer-in-logs)))
+           ((boundp 'local-write-file-hooks)
+            (setq local-write-file-hooks '(erc-save-buffer-in-logs)))
+           (t
+            (set (make-local-variable 'write-file-hooks)
+                 '(erc-save-buffer-in-logs))))
+      (when erc-log-insert-log-on-open
+       (ignore-errors (insert-file-contents (erc-current-logfile))
+                      (move-marker erc-last-saved-position
+                                   (1- (point-max))))))))
+
+(defun erc-log-disable-logging (buffer)
+  "Disable logging in BUFFER."
+  (when (erc-logging-enabled buffer)
+    (with-current-buffer buffer
+      (setq buffer-offer-save nil
+           erc-enable-logging nil))))
 
 (defun erc-log-all-but-server-buffers (buffer)
   "Returns t if logging should be enabled in BUFFER.
@@ -340,6 +351,19 @@ This function is a possible value for `erc-generate-log-file-name-function'."
     ;; we need a make-safe-file-name function.
     (convert-standard-filename file)))
 
+(defun erc-generate-log-file-name-network (buffer target nick server port)
+  "Generates a log-file name using the network name rather than server name.
+This results in a file name of the form #channel!nick@network.txt.
+This function is a possible value for `erc-generate-log-file-name-function'."
+  (require 'erc-networks)
+  (let ((file (concat
+              (if target (concat target "!"))
+              nick "@"
+              (or (with-current-buffer buffer (erc-network-name)) server)
+              ".txt")))
+    ;; we need a make-safe-file-name function.
+    (convert-standard-filename file)))
+
 ;;;###autoload
 (defun erc-save-buffer-in-logs (&optional buffer)
   "Append BUFFER contents to the log file, if logging is enabled.
index 50e4cfb..35ba1b1 100644 (file)
@@ -1,6 +1,7 @@
 ;;; erc-match.el --- Highlight messages matching certain regexps
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006,
+;;   2007 Free Software Foundation, Inc.
 
 ;; Author: Andreas Fuchs <asf@void.at>
 ;; Keywords: comm, faces
@@ -540,7 +541,7 @@ deactivate/activate match logging in the latter. See
     (when (and
           (or (eq erc-log-matches-flag t)
               (and (eq erc-log-matches-flag 'away)
-                   erc-away))
+                   (erc-away-time)))
           match-buffer-name)
       (let ((line (format-spec erc-log-match-format
                   (format-spec-make
@@ -572,7 +573,7 @@ deactivate/activate match logging in the latter. See
 
 (defun erc-log-matches-come-back (proc parsed)
   "Display a notice that messages were logged while away."
-  (when (and erc-away
+  (when (and (erc-away-time)
             (eq erc-log-matches-flag 'away))
     (mapc
      (lambda (match-type)
@@ -583,7 +584,7 @@ deactivate/activate match logging in the latter. See
                                  (with-current-buffer buffer
                                    (get-text-property (1- (point-max))
                                                       'timestamp))))
-                 (away-time     (erc-emacs-time-to-erc-time erc-away)))
+                 (away-time (erc-emacs-time-to-erc-time (erc-away-time))))
             (when (and away-time last-msg-time
                        (erc-time-gt last-msg-time away-time))
               (erc-display-message
index a582662..888da70 100644 (file)
@@ -1,6 +1,7 @@
 ;; erc-menu.el -- Menu-bar definitions for ERC
 
-;; Copyright (C) 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2004, 2005, 2006,
+;;   2007 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Keywords: comm, processes, menu
@@ -75,8 +76,8 @@
                (erc-channel-user-op-p (erc-current-nick))]
               ["Set a key..." erc-set-channel-key
                (erc-channel-user-op-p (erc-current-nick))])
-        ["Leave this channel..." erc-part-from-channel erc-channel-users]
-        "-")
+        ["Leave this channel..." erc-part-from-channel erc-channel-users])
+       "-"
        (list "Pals, fools and other keywords"
              ["Add pal..." erc-add-pal]
              ["Delete pal..." erc-delete-pal]
index 567c91c..b4c26b1 100644 (file)
@@ -184,7 +184,7 @@ join from that split has been detected or not.")
 ;;;###autoload
 (defun erc-cmd-WHOLEFT ()
   "Show who's gone."
-  (with-current-buffer (erc-server-buffer)
+  (erc-with-server-buffer
     (if (null erc-netsplit-list)
        (erc-display-message
         nil 'notice 'active
index 9f8c552..4631cea 100644 (file)
   ("Novernet: Random server" Novernet "irc.novernet.com" ((6665 6669) 7000 ))
   ("Nullrouted: Random server" Nullrouted "irc.nullrouted.org" ((6666 6669) 7000 ))
   ("NullusNet: Random server" NullusNet "irc.nullus.net" 6667)
+  ("OFTC: Random server" OFTC "irc.oftc.net" ((6667 6670) 7000))
   ("OpChat: Random server" OpChat "irc.opchat.org" ((6667 6669)))
   ("Othernet: Random server" Othernet "irc.othernet.org" 6667)
   ("Othernet: US, FL, Miami" Othernet "miami.fl.us.othernet.org" 6667)
@@ -611,6 +612,7 @@ PORTS is either a number, a list of numbers, or a list of port ranges."
     (Novernet "novernet.com")
     (Nullrouted "nullrouted.org")
     (NullusNet "nullus.net")
+    (OFTC "oftc.net")
     (OpChat "opchat.org")
     (Openprojects "openprojects.net")
     (Othernet "othernet.org")
@@ -737,12 +739,12 @@ search for a match in `erc-networks-alist'."
 
 (defun erc-network ()
   "Return the value of `erc-network' for the current server."
-  (with-current-buffer (erc-server-buffer) erc-network))
+  (erc-with-server-buffer erc-network))
 
 (defun erc-current-network ()
   "Deprecated.  Use `erc-network' instead.  Return the name of this server's
 network as a symbol."
-  (with-current-buffer (erc-server-buffer)
+  (erc-with-server-buffer
     (intern (downcase (symbol-name erc-network)))))
 
 (erc-make-obsolete 'erc-current-network 'erc-network
@@ -750,7 +752,7 @@ network as a symbol."
 
 (defun erc-network-name ()
   "Returns the name of the current network as a string."
-  (with-current-buffer (erc-server-buffer) (symbol-name erc-network)))
+  (erc-with-server-buffer (symbol-name erc-network)))
 
 (defun erc-set-network-name (proc parsed)
   "Set `erc-network' to the value returned by `erc-determine-network'."
index 82784c6..d34e38a 100644 (file)
@@ -121,8 +121,7 @@ changes."
             (ison-list (delete "" (split-string
                                    (erc-response.contents parsed))))
             (new-list ison-list)
-            (old-list (with-current-buffer (erc-server-buffer)
-                        erc-last-ison)))
+            (old-list (erc-with-server-buffer erc-last-ison)))
        (while new-list
          (when (not (erc-member-ignore-case (car new-list) old-list))
            (run-hook-with-args 'erc-notify-signon-hook server (car new-list))
@@ -204,7 +203,7 @@ with args, toggle notify status of people."
   (cond
    ((null args)
     ;; Print current notificated people (online)
-    (let ((ison (with-current-buffer (erc-server-buffer) erc-last-ison)))
+    (let ((ison (erc-with-server-buffer erc-last-ison)))
       (if (not ison)
          (erc-display-message
           nil 'notice 'active "No ison-list yet!")
index 951ba25..f207bcc 100644 (file)
@@ -180,7 +180,7 @@ the most recent speakers are listed first."
   (while (pcomplete-here (pcomplete-erc-nicks))))
 
 (defun pcomplete/erc-mode/UNIGNORE ()
-  (pcomplete-here (with-current-buffer (erc-server-buffer) erc-ignore-list)))
+  (pcomplete-here (erc-with-server-buffer erc-ignore-list)))
 
 ;;; Functions that provide possible completions.
 
@@ -233,7 +233,7 @@ If optional argument IGNORE-SELF is non-nil, don't return the current nick."
 (defun pcomplete-erc-all-nicks (&optional postfix)
   "Returns a list of all nicks on the current server."
   (let (nicks)
-    (with-current-buffer (process-buffer erc-server-process)
+    (erc-with-server-buffer
       (maphash (lambda (nick user)
                  (setq nicks (cons (concat nick postfix) nicks)))
                erc-server-users))
index 911a154..95c313a 100644 (file)
@@ -1,6 +1,7 @@
 ;; erc-ring.el -- Command history handling for erc using ring.el
 
-;; Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2006,
+;;   2007 Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Keywords: comm
index 5d03a7b..a2cc1b1 100644 (file)
@@ -168,15 +168,18 @@ Example of use:
   :type '(repeat
          (list :tag "Network"
                (choice :tag "Network name"
-                       (const freenode)
-                       (const OFTC)
+                       (const Ars)
+                       (const Austnet)
+                       (const Azzurra)
+                       (const BitlBee)
+                       (const BRASnet)
                        (const DALnet)
+                       (const freenode)
                        (const GalaxyNet)
-                       (const SlashNET)
-                       (const BRASnet)
                        (const iip)
-                       (const Austnet)
-                       (const Azzurra)
+                       (const OFTC)
+                       (const QuakeNet)
+                       (const SlashNET)
                        (symbol :tag "Network name"))
                (repeat :tag "Nickname and password"
                        (cons :tag "Identity"
@@ -186,68 +189,63 @@ Example of use:
 ;; Variables:
 
 (defcustom erc-nickserv-alist
-  '((BitlBee
-     nil
-     nil
+  '((Ars
+     nil nil
+     "Census"
+     "IDENTIFY" nil nil)
+    (Austnet
+     "NickOP!service@austnet.org"
+     "/msg\\s-NickOP@austnet.org\\s-identify\\s-<password>"
+     "nickop@austnet.org"
+     "identify" nil nil)
+    (Azzurra
+     "NickServ!service@azzurra.org"
+     "\ 2/ns\\s-IDENTIFY\\s-password\ 2"
+     "NickServ"
+     "IDENTIFY" nil nil)
+    (BitlBee
+     nil nil
      "&bitlbee"
-     "identify"
-     nil)
+     "identify" nil nil)
+    (BRASnet
+     "NickServ!services@brasnet.org"
+     "\ 2/NickServ\\s-IDENTIFY\\s-\1fsenha\1f\ 2"
+     "NickServ"
+     "IDENTIFY" nil "")
     (DALnet
      "NickServ!service@dal.net"
      "/msg\\s-NickServ@services.dal.net\\s-IDENTIFY\\s-<password>"
      "NickServ@services.dal.net"
-     "IDENTIFY"
-     nil)
+     "IDENTIFY" nil nil)
     (freenode
      "NickServ!NickServ@services."
      "/msg\\s-NickServ\\s-\ 2IDENTIFY\ 2\\s-<password>"
      "NickServ"
-     "IDENTIFY"
-     nil)
+     "IDENTIFY" nil nil)
     (GalaxyNet
      "NS!nickserv@galaxynet.org"
      "Please\\s-change\\s-nicks\\s-or\\s-authenticate."
      "NS@services.galaxynet.org"
-     "AUTH"
-     t)
-    (SlashNET
-     "NickServ!services@services.slashnet.org"
-     "/msg\\s-NickServ\\s-IDENTIFY\\s-\1fpassword"
-     "NickServ@services.slashnet.org"
-     "IDENTIFY"
-     nil)
+     "AUTH" t nil)
     (iip
      "Trent@anon.iip"
      "type\\s-/squery\\s-Trent\\s-identify\\s-<password>"
      "Trent@anon.iip"
-     "IDENTIFY"
-     nil
-     "SQUERY")
-    (BRASnet
-     "NickServ!services@brasnet.org"
-     "\ 2/NickServ\\s-IDENTIFY\\s-\1fsenha\1f\ 2"
-     "NickServ"
-     "IDENTIFY"
-     nil
-     "")
-    (Austnet
-     "NickOP!service@austnet.org"
-     "/msg\\s-NickOP@austnet.org\\s-identify\\s-<password>"
-     "nickop@austnet.org"
-     "identify"
-     nil)
-    (Azzurra
-     "NickServ!service@azzurra.org"
-     "\ 2/ns\\s-IDENTIFY\\s-password\ 2"
-     "NickServ"
-     "IDENTIFY"
-     nil)
+     "IDENTIFY" nil "SQUERY")
     (OFTC
      "NickServ!services@services.oftc.net"
-     "/msg\\s-NickServ\\s-IDENTIFY\\s-\^_password"
+     "type\\s-\ 2/msg\\s-NickServ\\s-IDENTIFY\\s-\1fpassword\1f\ 2."
      "NickServ"
-     "IDENTIFY"
-     nil))
+     "IDENTIFY" nil nil)
+    (QuakeNet
+     nil nil
+     "Q@CServe.quakenet.org"
+     "auth" t nil)
+    (SlashNET
+     "NickServ!services@services.slashnet.org"
+     "/msg\\s-NickServ\\s-IDENTIFY\\s-\1fpassword"
+     "NickServ@services.slashnet.org"
+     "IDENTIFY" nil nil))
    "Alist of NickServer details, sorted by network.
 Every element in the list has the form
   \(SYMBOL NICKSERV REGEXP NICK KEYWORD USE-CURRENT ANSWER)
@@ -265,8 +263,10 @@ ANSWER is the command to use for the answer.  The default is 'privmsg.
    :type '(repeat
           (list :tag "Nickserv data"
                 (symbol :tag "Network name")
-                (string :tag "Nickserv's nick!user@host")
-                (regexp :tag "Identify request sent by Nickserv")
+                (choice (string :tag "Nickserv's nick!user@host")
+                        (const :tag "No message sent by Nickserv" nil))
+                (choice (regexp :tag "Identify request sent by Nickserv")
+                        (const :tag "No message sent by Nickserv" nil))
                 (string :tag "Identify to")
                 (string :tag "Identify keyword")
                 (boolean :tag "Use current nick in identify message?")
index 551b83f..0d88589 100644 (file)
@@ -1,6 +1,7 @@
 ;;; erc-speedbar.el --- Speedbar support for ERC
 
-;; Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 2001, 2002, 2003, 2004, 2006,
+;;   2007 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Contributor: Eric M. Ludlam <eric@siege-engine.com>
@@ -113,7 +114,7 @@ This will add a speedbar major display mode."
   (erase-buffer)
   (let (serverp chanp queryp)
     (with-current-buffer buffer
-      (setq serverp (eq buffer (process-buffer erc-server-process)))
+      (setq serverp (erc-server-buffer-p))
       (setq chanp (erc-channel-p (erc-default-target)))
       (setq queryp (erc-query-buffer-p)))
     (cond (serverp
index 484ddb3..a15ca17 100644 (file)
   ;; called AFTER the server buffer is initialized.
   ((add-hook 'erc-connect-pre-hook 'erc-spelling-init)
    (dolist (buffer (erc-buffer-list))
-     (when (buffer-live-p buffer)
-       (with-current-buffer buffer (erc-spelling-init)))))
+     (erc-spelling-init buffer)))
   ((remove-hook 'erc-connect-pre-hook 'erc-spelling-init)
    (dolist (buffer (erc-buffer-list))
-     (when (buffer-live-p buffer)
-       (with-current-buffer buffer (flyspell-mode 0))))))
+     (with-current-buffer buffer (flyspell-mode 0)))))
 
 (defcustom erc-spelling-dictionaries nil
   "An alist mapping buffer names to dictionaries.
@@ -60,24 +58,22 @@ name here."
                                (string :tag "Dictionary"))))
   :group 'erc-spelling)
 
-(defun erc-spelling-init ()
-  "Enable flyspell mode in an ERC buffer."
-  (let ((name (downcase (buffer-name)))
-        (dicts erc-spelling-dictionaries))
-    (when dicts
-      (while (and dicts
-                  (not (string= name (downcase (caar dicts)))))
-        (setq dicts (cdr dicts)))
-      (setq ispell-local-dictionary
-            (if dicts
-                (cadr (car dicts))
-              (let ((server (erc-server-buffer)))
-                (if server
-                    (with-current-buffer server
-                      ispell-local-dictionary)
-                  nil))))))
-  (setq flyspell-generic-check-word-p 'erc-spelling-flyspell-verify)
-  (flyspell-mode 1))
+(defun erc-spelling-init (buffer)
+  "Enable flyspell mode in an ERC buffer.
+The current buffer is given by BUFFER."
+  (with-current-buffer buffer
+    (let ((name (downcase (buffer-name)))
+          (dicts erc-spelling-dictionaries))
+      (when dicts
+        (while (and dicts
+                    (not (string= name (downcase (caar dicts)))))
+          (setq dicts (cdr dicts)))
+        (setq ispell-local-dictionary
+              (if dicts
+                  (cadr (car dicts))
+                (erc-with-server-buffer ispell-local-dictionary)))))
+    (setq flyspell-generic-check-word-p 'erc-spelling-flyspell-verify)
+    (flyspell-mode 1)))
 
 (defun erc-spelling-unhighlight-word (word)
   "Unhighlight the given WORD.
index 5a9977a..0b8017f 100644 (file)
@@ -147,7 +147,7 @@ or `erc-send-modify-hook'."
        (error "Timestamp function unbound"))
       (when (and (fboundp erc-insert-away-timestamp-function)
                 erc-away-timestamp-format
-                (with-current-buffer (erc-server-buffer) erc-away)
+                (erc-away-time)
                 (not erc-timestamp-format))
        (funcall erc-insert-away-timestamp-function
                 (erc-format-timestamp ct erc-away-timestamp-format)))
@@ -203,6 +203,7 @@ space before a right timestamp in any saved logs."
         (s (if ignore-p (make-string len ? ) string)))
     (unless ignore-p (setq erc-timestamp-last-inserted string))
     (erc-put-text-property 0 len 'field 'erc-timestamp s)
+    (erc-put-text-property 0 len 'invisible 'timestamp s)
     (insert s)))
 
 (defun erc-insert-aligned (string pos)
@@ -319,6 +320,21 @@ set, and timestamping is already active."
   (setq erc-hide-timestamps nil)
   (erc-munge-invisibility-spec))
 
+(defun erc-toggle-timestamps ()
+  "Hide or show timestamps in ERC buffers.
+
+Note that timestamps can only be shown for a message using this
+function if `erc-timestamp-format' was set and timestamping was
+enabled when the message was inserted."
+  (interactive)
+  (if erc-hide-timestamps
+      (setq erc-hide-timestamps nil)
+    (setq erc-hide-timestamps t))
+  (mapc (lambda (buffer)
+         (with-current-buffer buffer
+           (erc-munge-invisibility-spec)))
+       (erc-buffer-list)))
+
 (defun erc-echo-timestamp (before now)
   "Print timestamp text-property of an IRC message.
 Argument BEFORE is where point was before it got moved and
index 0fa550a..4a8b673 100644 (file)
@@ -1,6 +1,7 @@
 ;;; erc-track.el --- Track modified channel buffers
 
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006,
+;;   2007 Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Keywords: comm, faces
   "Track active buffers and show activity in the modeline."
   :group 'erc)
 
+(defcustom erc-track-enable-keybindings 'ask
+  "Whether to enable the ERC track keybindings, namely:
+`C-c C-SPC' and `C-c C-@', which both do the same thing.
+
+The default is to check to see whether these keys are used
+already: if not, then enable the ERC track minor mode, which
+provides these keys.  Otherwise, do not touch the keys.
+
+This can alternatively be set to either t or nil, which indicate
+respectively always to enable ERC track minor mode or never to
+enable ERC track minor mode.
+
+The reason for using this default value is to both (1) adhere to
+the Emacs development guidelines which say not to touch keys of
+the form C-c C-<something> and also (2) to meet the expectations
+of long-time ERC users, many of whom rely on these keybindings."
+  :group 'erc-track
+  :type '(choice (const :tag "Ask, if used already" ask)
+                (const :tag "Enable" t)
+                (const :tag "Disable" nil)))
+
 (defcustom erc-track-visibility t
   "Where do we look for buffers to determine their visibility?
 The value of this variable determines, when a buffer is considered
 visible or invisible.  New messages in invisible buffers are tracked,
 while switching to visible buffers when they are tracked removes them
-from the list.  See also `erc-track-when-inactive-mode'.
+from the list.  See also `erc-track-when-inactive'.
 
 Possible values are:
 
@@ -488,45 +510,124 @@ START is the minimum length of the name used."
         (equal (erc-unique-substrings '("abc" "abcdefg"))
                '("abc" "abcd"))))))
 
+;;; Minor mode
+
+;; Play nice with other IRC clients (and Emacs development rules) by
+;; making this a minor mode
+
+(defvar erc-track-minor-mode-map (make-sparse-keymap)
+  "Keymap for rcirc track minor mode.")
+
+(define-key erc-track-minor-mode-map (kbd "C-c C-@") 'erc-track-switch-buffer)
+(define-key erc-track-minor-mode-map (kbd "C-c C-SPC")
+  'erc-track-switch-buffer)
+
+;;;###autoload
+(define-minor-mode erc-track-minor-mode
+  "Global minor mode for tracking ERC buffers and showing activity in the
+mode line.
+
+This exists for the sole purpose of providing the C-c C-SPC and
+C-c C-@ keybindings.  Make sure that you have enabled the track
+module, otherwise the keybindings will not do anything useful."
+  :init-value nil
+  :lighter ""
+  :keymap erc-track-minor-mode-map
+  :global t
+  :group 'erc-track)
+
+(defun erc-track-minor-mode-maybe ()
+  "Enable `erc-track-minor-mode', depending on `erc-track-enable-keybindings'."
+  (unless (or erc-track-minor-mode
+             ;; don't start the minor mode until we have an ERC
+             ;; process running, because we don't want to prompt the
+             ;; user while starting Emacs
+             (null (erc-buffer-list)))
+    (cond ((eq erc-track-enable-keybindings 'ask)
+          (let ((key (or (and (key-binding (kbd "C-c C-SPC")) "C-SPC")
+                         (and (key-binding (kbd "C-c C-@")) "C-@"))))
+            (if key
+                (if (y-or-n-p
+                     (concat "The C-c " key " binding is in use;"
+                             " override it for tracking? "))
+                    (progn
+                      (message (concat "Will change it; set"
+                                       " `erc-track-enable-keybindings'"
+                                       " to disable this message"))
+                      (sleep-for 3)
+                      (erc-track-minor-mode 1))
+                  (message (concat "Not changing it; set"
+                                   " `erc-track-enable-keybindings'"
+                                   " to disable this message"))
+                  (sleep-for 3))
+              (erc-track-minor-mode 1))))
+         ((eq erc-track-enable-keybindings t)
+          (erc-track-minor-mode 1))
+         (t nil))))
+
 ;;; Module
 
 ;;;###autoload (autoload 'erc-track-mode "erc-track" nil t)
-(define-erc-module track track-modified-channels
+(define-erc-module track nil
   "This mode tracks ERC channel buffers with activity."
-  ((erc-track-add-to-mode-line erc-track-position-in-mode-line)
-   (setq erc-modified-channels-object (erc-modified-channels-object nil))
-   (erc-update-mode-line)
-   (if (featurep 'xemacs)
-       (defadvice switch-to-buffer (after erc-update (&rest args) activate)
-        (erc-modified-channels-update))
-     (add-hook 'window-configuration-change-hook 'erc-modified-channels-update))
-   (add-hook 'erc-insert-post-hook 'erc-track-modified-channels)
-   (add-hook 'erc-disconnected-hook 'erc-modified-channels-update))
-  ((erc-track-remove-from-mode-line)
-   (if (featurep 'xemacs)
-       (ad-disable-advice 'switch-to-buffer 'after 'erc-update)
-     (remove-hook 'window-configuration-change-hook
-                 'erc-modified-channels-update))
-   (remove-hook 'erc-disconnected-hook 'erc-modified-channels-update)
-   (remove-hook 'erc-insert-post-hook 'erc-track-modified-channels)))
-
-;;;###autoload (autoload 'erc-track-when-inactive-mode "erc-track" nil t)
-(define-erc-module track-when-inactive nil
-  "This mode enables channel tracking even for visible buffers,
-if you are inactivity."
-  ((if (featurep 'xemacs)
-       (defadvice switch-to-buffer (after erc-update-when-inactive (&rest args) activate)
-        (erc-user-is-active))
-     (add-hook 'window-configuration-change-hook 'erc-user-is-active))
-   (add-hook 'erc-send-completed-hook 'erc-user-is-active)
-   (add-hook 'erc-server-001-functions 'erc-user-is-active))
-  ((erc-track-remove-from-mode-line)
-   (if (featurep 'xemacs)
-       (ad-disable-advice 'switch-to-buffer 'after 'erc-update-when-inactive)
-     (remove-hook 'window-configuration-change-hook 'erc-user-is-active))
-   (remove-hook 'erc-send-completed-hook 'erc-user-is-active)
-   (remove-hook 'erc-server-001-functions 'erc-user-is-active)
-   (remove-hook 'erc-timer-hook 'erc-user-is-active)))
+  ;; Enable:
+  ((when (boundp 'erc-track-when-inactive)
+     (if erc-track-when-inactive
+        (progn
+          (if (featurep 'xemacs)
+              (defadvice switch-to-buffer (after erc-update-when-inactive
+                                                 (&rest args) activate)
+                (erc-user-is-active))
+            (add-hook 'window-configuration-change-hook 'erc-user-is-active))
+          (add-hook 'erc-send-completed-hook 'erc-user-is-active)
+          (add-hook 'erc-server-001-functions 'erc-user-is-active))
+       (erc-track-add-to-mode-line erc-track-position-in-mode-line)
+       (setq erc-modified-channels-object (erc-modified-channels-object nil))
+       (erc-update-mode-line)
+       (if (featurep 'xemacs)
+          (defadvice switch-to-buffer (after erc-update (&rest args) activate)
+            (erc-modified-channels-update))
+        (add-hook 'window-configuration-change-hook
+                  'erc-modified-channels-update))
+       (add-hook 'erc-insert-post-hook 'erc-track-modified-channels)
+       (add-hook 'erc-disconnected-hook 'erc-modified-channels-update))
+     ;; enable the tracking keybindings
+     (erc-track-minor-mode-maybe)))
+  ;; Disable:
+  ((when (boundp 'erc-track-when-inactive)
+     (erc-track-remove-from-mode-line)
+     (if erc-track-when-inactive
+        (progn
+          (if (featurep 'xemacs)
+              (ad-disable-advice 'switch-to-buffer 'after
+                                 'erc-update-when-inactive)
+            (remove-hook 'window-configuration-change-hook
+                         'erc-user-is-active))
+          (remove-hook 'erc-send-completed-hook 'erc-user-is-active)
+          (remove-hook 'erc-server-001-functions 'erc-user-is-active)
+          (remove-hook 'erc-timer-hook 'erc-user-is-active))
+       (if (featurep 'xemacs)
+          (ad-disable-advice 'switch-to-buffer 'after 'erc-update)
+        (remove-hook 'window-configuration-change-hook
+                     'erc-modified-channels-update))
+       (remove-hook 'erc-disconnected-hook 'erc-modified-channels-update)
+       (remove-hook 'erc-insert-post-hook 'erc-track-modified-channels))
+     ;; disable the tracking keybindings
+     (when erc-track-minor-mode
+       (erc-track-minor-mode -1)))))
+
+(defcustom erc-track-when-inactive nil
+  "Enable channel tracking even for visible buffers, if you are
+inactive."
+  :group 'erc-track
+  :type 'boolean
+  :set (lambda (sym val)
+        (if erc-track-mode
+            (progn
+              (erc-track-disable)
+              (set sym val)
+              (erc-track-enable))
+          (set sym val))))
 
 ;;; Visibility
 
@@ -545,7 +646,7 @@ only consider active buffers visible.")
 
 (defun erc-buffer-visible (buffer)
   "Return non-nil when the buffer is visible."
-  (if erc-track-when-inactive-mode
+  (if erc-track-when-inactive
       (when erc-buffer-activity; could be nil
        (and (get-buffer-window buffer erc-track-visibility)
             (<= (erc-time-diff erc-buffer-activity (erc-current-time))
@@ -815,7 +916,9 @@ relative to `erc-track-switch-direction'"
 switch back to the last non-ERC buffer visited.  Next is defined by
 `erc-track-switch-direction', a negative argument will reverse this."
   (interactive "p")
-  (when erc-track-mode
+  (if (not erc-track-mode)
+      (message (concat "Enable the ERC track module if you want to use the"
+                      " tracking minor mode"))
     (cond (erc-modified-channels-alist
           ;; if we're not in erc-mode, set this buffer to return to
           (unless (eq major-mode 'erc-mode)
@@ -828,12 +931,6 @@ switch back to the last non-ERC buffer visited.  Next is defined by
                (buffer-live-p erc-track-last-non-erc-buffer))
           (switch-to-buffer erc-track-last-non-erc-buffer)))))
 
-;; These bindings are global, because they pop us from any other
-;; buffer to an active ERC buffer!
-
-(global-set-key (kbd "C-c C-@") 'erc-track-switch-buffer)
-(global-set-key (kbd "C-c C-SPC") 'erc-track-switch-buffer)
-
 (provide 'erc-track)
 
 ;;; erc-track.el ends here
index 927dce0..37c2c2e 100644 (file)
@@ -66,7 +66,7 @@
 
 ;;; Code:
 
-(defconst erc-version-string "Version 5.2 stable pre-release"
+(defconst erc-version-string "Version 5.2"
   "ERC version.  This is used by function `erc-version'.")
 
 (eval-when-compile (require 'cl))
@@ -324,7 +324,7 @@ Each function should accept two arguments, NEW-NICK and OLD-NICK."
 
 (defcustom erc-connect-pre-hook '(erc-initialize-log-marker)
   "Hook called just before `erc' calls `erc-connect'.
-Functions are run in the buffer-to-be."
+Functions are passed a buffer as the first argument."
   :group 'erc-hooks
   :type 'hook)
 
@@ -392,14 +392,14 @@ in the current buffer's `erc-channel-users' hash table."
 (defsubst erc-get-server-user (nick)
   "Finds the USER corresponding to NICK in the current server's
 `erc-server-users' hash table."
-  (with-current-buffer (process-buffer erc-server-process)
+  (erc-with-server-buffer
     (gethash (erc-downcase nick) erc-server-users)))
 
 (defsubst erc-add-server-user (nick user)
   "This function is for internal use only.
 
 Adds USER with nickname NICK to the `erc-server-users' hash table."
-  (with-current-buffer (process-buffer erc-server-process)
+  (erc-with-server-buffer
     (puthash (erc-downcase nick) user erc-server-users)))
 
 (defsubst erc-remove-server-user (nick)
@@ -410,7 +410,7 @@ hash table.  This user is not removed from the
 `erc-channel-users' lists of other buffers.
 
 See also: `erc-remove-user'."
-  (with-current-buffer (process-buffer erc-server-process)
+  (erc-with-server-buffer
     (remhash (erc-downcase nick) erc-server-users)))
 
 (defun erc-change-user-nickname (user new-nick)
@@ -421,7 +421,7 @@ Changes the nickname of USER to NEW-NICK in the
 other buffers are also changed."
   (let ((nick (erc-server-user-nickname user)))
     (setf (erc-server-user-nickname user) new-nick)
-    (with-current-buffer (process-buffer erc-server-process)
+    (erc-with-server-buffer
       (remhash (erc-downcase nick) erc-server-users)
       (puthash (erc-downcase new-nick) user erc-server-users))
     (dolist (buf (erc-server-user-buffers user))
@@ -514,16 +514,15 @@ See also: `erc-sort-channel-users-by-activity'"
 
 (defun erc-get-server-nickname-list ()
   "Returns a list of known nicknames on the current server."
-    (if (erc-server-process-alive)
-       (with-current-buffer (erc-server-buffer)
-         (let (nicks)
-           (when (hash-table-p erc-server-users)
-             (maphash (lambda (n user)
-                        (setq nicks
-                              (cons (erc-server-user-nickname user)
-                                    nicks)))
-                      erc-server-users)
-             nicks)))))
+  (erc-with-server-buffer
+    (let (nicks)
+      (when (hash-table-p erc-server-users)
+       (maphash (lambda (n user)
+                  (setq nicks
+                        (cons (erc-server-user-nickname user)
+                              nicks)))
+                erc-server-users)
+       nicks))))
 
 (defun erc-get-channel-nickname-list ()
   "Returns a list of known nicknames on the current channel."
@@ -538,16 +537,15 @@ See also: `erc-sort-channel-users-by-activity'"
 
 (defun erc-get-server-nickname-alist ()
   "Returns an alist of known nicknames on the current server."
-    (if (erc-server-process-alive)
-       (with-current-buffer (erc-server-buffer)
-         (let (nicks)
-           (when (hash-table-p erc-server-users)
-             (maphash (lambda (n user)
-                        (setq nicks
-                              (cons (cons (erc-server-user-nickname user) nil)
-                                    nicks)))
-                      erc-server-users)
-             nicks)))))
+  (erc-with-server-buffer
+    (let (nicks)
+      (when (hash-table-p erc-server-users)
+       (maphash (lambda (n user)
+                  (setq nicks
+                        (cons (cons (erc-server-user-nickname user) nil)
+                              nicks)))
+                erc-server-users)
+       nicks))))
 
 (defun erc-get-channel-nickname-alist ()
   "Returns an alist of known nicknames on the current channel."
@@ -1293,7 +1291,7 @@ capabilities."
   (unless (erc-server-buffer-p)
     (error
      "You should only run `erc-once-with-server-event' in a server buffer"))
-  (let ((fun (erc-gensym))
+  (let ((fun (make-symbol "fun"))
        (hook (erc-get-hook event)))
      (put fun 'erc-original-buffer (current-buffer))
      (fset fun `(lambda (proc parsed)
@@ -1316,7 +1314,7 @@ not be run.
 
 When FORMS execute, the current buffer is the server buffer associated with the
 connection over which the data was received that triggered EVENT."
-  (let ((fun (erc-gensym))
+  (let ((fun (make-symbol "fun"))
        (hook (erc-get-hook event)))
      (fset fun `(lambda (proc parsed)
                  (remove-hook ',hook ',fun)
@@ -1370,7 +1368,7 @@ If BUFFER is nil, the current buffer is used."
 (defun erc-ison-p (nick)
   "Return non-nil if NICK is online."
   (interactive "sNick: ")
-  (with-current-buffer (erc-server-buffer)
+  (erc-with-server-buffer
     (let ((erc-online-p 'unknown))
       (erc-once-with-server-event
        303
@@ -1420,7 +1418,7 @@ server buffer.")
 (defun erc-active-buffer ()
   "Return the value of `erc-active-buffer' for the current server.
 Defaults to the server buffer."
-  (with-current-buffer (erc-server-buffer)
+  (erc-with-server-buffer
     (if (buffer-live-p erc-active-buffer)
        erc-active-buffer
       (setq erc-active-buffer (current-buffer)))))
@@ -1603,10 +1601,10 @@ See `erc-get-buffer' for details.
 See also `with-current-buffer'.
 
 \(fn (TARGET [PROCESS]) BODY...)"
-  (let ((buf (erc-gensym))
-       (proc (erc-gensym))
-       (target (erc-gensym))
-       (process (erc-gensym)))
+  (let ((buf (make-symbol "buf"))
+       (proc (make-symbol "proc"))
+       (target (make-symbol "target"))
+       (process (make-symbol "process")))
     `(let* ((,target ,(car spec))
            (,process ,(cadr spec))
            (,buf (if (bufferp ,target)
@@ -1616,7 +1614,7 @@ See also `with-current-buffer'.
                                          erc-server-process))))
                      (if (and ,target ,proc)
                          (erc-get-buffer ,target ,proc))))))
-       (when ,buf
+       (when (buffer-live-p ,buf)
         (with-current-buffer ,buf
           ,@body)))))
 (put 'erc-with-buffer 'lisp-indent-function 1)
@@ -1671,8 +1669,8 @@ FORMS will be evaluated in all buffers having the process PROCESS and
 where PRED matches or in all buffers of the server process if PRED is
 nil."
   ;; Make the evaluation have the correct order
-  (let ((pre (erc-gensym))
-       (pro (erc-gensym)))
+  (let ((pre (make-symbol "pre"))
+       (pro (make-symbol "pro")))
     `(let ((,pro ,process)
           (,pre ,pred))
        (mapcar (lambda (buffer)
@@ -1755,7 +1753,10 @@ all channel buffers on all servers."
 (make-variable-buffer-local 'erc-invitation)
 
 (defvar erc-away nil
-  "Non-nil indicates that we are away.")
+  "Non-nil indicates that we are away.
+
+Use `erc-away-time' to access this if you might be in a channel
+buffer rather than a server buffer.")
 (make-variable-buffer-local 'erc-away)
 
 (defvar erc-channel-list nil
@@ -1813,43 +1814,43 @@ removed from the list will be disabled."
   :type
   '(set
     :greedy t
-    (const :tag "Set away status automatically" autoaway)
-    (const :tag "Join channels automatically" autojoin)
-    (const :tag "Buttonize URLs, nicknames, and other text" button)
-    (const
-     :tag
-     "Mark unidentified users on freenode and other servers supporting CAPAB"
-     capab-identify)
-    (const :tag "Wrap long lines" fill)
-    (const :tag "Launch an identd server on port 8113" identd)
-    (const :tag "Highlight or remove IRC control characters"
+    (const :tag "autoaway: Set away status automatically" autoaway)
+    (const :tag "autojoin: Join channels automatically" autojoin)
+    (const :tag "button: Buttonize URLs, nicknames, and other text" button)
+    (const :tag "capab: Mark unidentified users on servers supporting CAPAB"
+          capab-identify)
+    (const :tag "completion: Complete nicknames and commands (programmable)"
+          completion)
+    (const :tag "hecomplete: Complete nicknames and commands (old)" hecomplete)
+    (const :tag "fill: Wrap long lines" fill)
+    (const :tag "identd: Launch an identd server on port 8113" identd)
+    (const :tag "irccontrols: Highlight or remove IRC control characters"
           irccontrols)
-    (const :tag "Save buffers in logs" log)
-    (const :tag "Highlight pals, fools, and other keywords" match)
-    (const :tag "Display a menu in ERC buffers" menu)
-    (const :tag "Detect netsplits" netsplit)
-    (const :tag "Don't display non-IRC commands after evaluation"
+    (const :tag "log: Save buffers in logs" log)
+    (const :tag "match: Highlight pals, fools, and other keywords" match)
+    (const :tag "menu: Display a menu in ERC buffers" menu)
+    (const :tag "netsplit: Detect netsplits" netsplit)
+    (const :tag "noncommands: Don't display non-IRC commands after evaluation"
           noncommands)
-    (const :tag "Notify when the online status of certain users changes"
+    (const :tag
+          "notify: Notify when the online status of certain users changes"
           notify)
-    (const :tag "Complete nicknames and commands (programmable)"
-          completion)
-    (const :tag "Complete nicknames and commands (old)" hecomplete)
-    (const :tag "Process CTCP PAGE requests from IRC" page)
-    (const :tag "Make displayed lines read-only" readonly)
-    (const :tag "Replace text in messages" replace)
-    (const :tag "Enable an input history" ring)
-    (const :tag "Scroll to the bottom of the buffer" scrolltobottom)
-    (const :tag "Identify to Nickserv (IRC Services) automatically"
+    (const :tag "page: Process CTCP PAGE requests from IRC" page)
+    (const :tag "readonly: Make displayed lines read-only" readonly)
+    (const :tag "replace: Replace text in messages" replace)
+    (const :tag "ring: Enable an input history" ring)
+    (const :tag "scrolltobottom: Scroll to the bottom of the buffer"
+          scrolltobottom)
+    (const :tag "services: Identify to Nickserv (IRC Services) automatically"
           services)
-    (const :tag "Convert smileys to pretty icons" smiley)
-    (const :tag "Play sounds when you receive CTCP SOUND requests"
+    (const :tag "smiley: Convert smileys to pretty icons" smiley)
+    (const :tag "sound: Play sounds when you receive CTCP SOUND requests"
           sound)
-    (const :tag "Add timestamps to messages" stamp)
-    (const :tag "Check spelling" spelling)
-    (const :tag "Track channel activity in the mode-line" track)
-    (const :tag "Truncate buffers to a certain size" truncate)
-    (const :tag "Translate morse code in messages" unmorse)
+    (const :tag "stamp: Add timestamps to messages" stamp)
+    (const :tag "spelling: Check spelling" spelling)
+    (const :tag "track: Track channel activity in the mode-line" track)
+    (const :tag "truncate: Truncate buffers to a certain size" truncate)
+    (const :tag "unmorse: Translate morse code in messages" unmorse)
     (repeat :tag "Others" :inline t symbol))
   :group 'erc)
 
@@ -1902,9 +1903,7 @@ removed from the list will be disabled."
 
 (defun erc-open (&optional server port nick full-name
                           connect passwd tgt-list channel process)
-  "ERC is a powerful, modular, and extensible IRC client.
-
-Connect to SERVER on PORT as NICK with FULL-NAME.
+  "Connect to SERVER on PORT as NICK with FULL-NAME.
 
 If CONNECT is non-nil, connect to the server.  Otherwise assume
 already connected and just create a separate buffer for the new
@@ -1969,10 +1968,6 @@ Returns the buffer for the given server or channel."
     (erc-set-active-buffer buffer)
     ;; last invitation channel
     (setq erc-invitation nil)
-    ;; away flag
-    ;; Should only be used in session-buffers
-    (setq erc-away (let ((serverbuf (erc-server-buffer)))
-                    (and serverbuf (with-current-buffer serverbuf erc-away))))
     ;; Server channel list
     (setq erc-channel-list ())
     ;; login-time 'nick in use' error
@@ -1987,25 +1982,25 @@ Returns the buffer for the given server or channel."
     (setq erc-dbuf
          (when erc-log-p
            (get-buffer-create (concat "*ERC-DEBUG: " server "*"))))
-    (erc-determine-parameters server port nick full-name)
-
-    ;; Saving log file on exit
-    (run-hooks 'erc-connect-pre-hook)
-
-    (when connect
-      (erc-server-connect erc-session-server erc-session-port))
-    (erc-update-mode-line)
-    (set-marker erc-insert-marker (point))
+    ;; set up prompt
     (unless continued-session
       (goto-char (point-max))
       (insert "\n"))
-    (set-marker (process-mark erc-server-process) (point))
     (if continued-session
        (goto-char old-point)
       (set-marker erc-insert-marker (point))
       (erc-display-prompt)
       (goto-char (point-max)))
 
+    (erc-determine-parameters server port nick full-name)
+
+    ;; Saving log file on exit
+    (run-hook-with-args 'erc-connect-pre-hook buffer)
+
+    (when connect
+      (erc-server-connect erc-session-server erc-session-port buffer))
+    (erc-update-mode-line)
+
     ;; Now display the buffer in a window as per user wishes.
     (unless (eq buffer old-buffer)
       (when erc-log-p
@@ -2016,11 +2011,13 @@ Returns the buffer for the given server or channel."
 
     buffer))
 
-(defun erc-initialize-log-marker ()
-  "Initialize the `erc-last-saved-position' marker to a sensible position."
+(defun erc-initialize-log-marker (buffer)
+  "Initialize the `erc-last-saved-position' marker to a sensible position.
+BUFFER is the current buffer."
+  (with-current-buffer buffer
     (setq erc-last-saved-position (make-marker))
     (move-marker erc-last-saved-position
-                (1- (marker-position erc-insert-marker))))
+                (1- (marker-position erc-insert-marker)))))
 
 ;; interactive startup
 
@@ -2120,8 +2117,12 @@ functions in here get called with the parameters SERVER and NICK."
                  (nick   (erc-compute-nick))
                  password
                  (full-name (erc-compute-full-name)))
-  "Select connection parameters and run ERC.
-Non-interactively, it takes keyword arguments
+  "ERC is a powerful, modular, and extensible IRC client.
+This function is the main entry point for ERC.
+
+It permits you to select connection parameters, and then starts ERC.
+
+Non-interactively, it takes the keyword arguments
    (server (erc-compute-server))
    (port   (erc-compute-port))
    (nick   (erc-compute-nick))
@@ -2132,12 +2133,13 @@ That is, if called with
 
    (erc :server \"irc.freenode.net\" :full-name \"Harry S Truman\")
 
-server and full-name will be set to those values, whereas
+then the server and full-name will be set to those values, whereas
 `erc-compute-port', `erc-compute-nick' and `erc-compute-full-name' will
 be invoked for the values of the other parameters."
   (interactive (erc-select-read-args))
   (erc-open server port nick full-name t password))
 
+;;;###autoload
 (defalias 'erc-select 'erc)
 
 (defun erc-ssl (&rest r)
@@ -2428,7 +2430,7 @@ See also `erc-format-message' and `erc-display-line'."
 
 This function relies on the erc-parsed text-property being
 present."
-  (let ((prop-val (get-text-property position 'erc-parsed)))
+  (let ((prop-val (erc-get-parsed-vector position)))
     (and prop-val (member (erc-response.command prop-val) list))))
 
 (defvar erc-send-input-line-function 'erc-send-input-line)
@@ -2586,20 +2588,19 @@ If no USER argument is specified, list the contents of `erc-ignore-list'."
        (erc-display-line
         (erc-make-notice (format "Now ignoring %s" user))
         'active)
-       (with-current-buffer (erc-server-buffer)
-         (add-to-list 'erc-ignore-list user)))
-    (if (null (with-current-buffer (erc-server-buffer) erc-ignore-list))
+       (erc-with-server-buffer (add-to-list 'erc-ignore-list user)))
+    (if (null (erc-with-server-buffer erc-ignore-list))
        (erc-display-line (erc-make-notice "Ignore list is empty") 'active)
       (erc-display-line (erc-make-notice "Ignore list:") 'active)
       (mapc #'(lambda (item)
                (erc-display-line (erc-make-notice item)
                                  'active))
-           (with-current-buffer (erc-server-buffer) erc-ignore-list))))
+           (erc-with-server-buffer erc-ignore-list))))
   t)
 
 (defun erc-cmd-UNIGNORE (user)
   "Remove the user specified in USER from the ignore list."
-  (let ((ignored-nick (car (with-current-buffer (erc-server-buffer)
+  (let ((ignored-nick (car (erc-with-server-buffer
                             (erc-member-ignore-case (regexp-quote user)
                                                     erc-ignore-list)))))
     (unless ignored-nick
@@ -2614,7 +2615,7 @@ If no USER argument is specified, list the contents of `erc-ignore-list'."
       (erc-display-line
        (erc-make-notice (format "No longer ignoring %s" user))
        'active)
-      (with-current-buffer (erc-server-buffer)
+      (erc-with-server-buffer
        (setq erc-ignore-list (delete ignored-nick erc-ignore-list)))))
   t)
 
@@ -2673,8 +2674,8 @@ If no reason is given, unset away status."
   "Mark the user as being away everywhere, the reason being indicated by LINE."
   ;; on all server buffers.
   (erc-with-all-buffers-of-server nil
-   #'erc-server-buffer-p
-   (erc-cmd-AWAY line)))
+    #'erc-open-server-buffer-p
+    (erc-cmd-AWAY line)))
 (put 'erc-cmd-GAWAY 'do-not-parse-args t)
 
 (defun erc-cmd-CTCP (nick cmd &rest args)
@@ -2866,10 +2867,9 @@ If SERVER is non-nil, use that, rather than the current server."
 
 (defun erc-cmd-IDLE (nick)
   "Show the length of time NICK has been idle."
-  (let ((serverbuf (erc-server-buffer))
-       (origbuf (current-buffer))
+  (let ((origbuf (current-buffer))
        symlist)
-    (with-current-buffer serverbuf
+    (erc-with-server-buffer
       (add-to-list 'symlist
                   (cons (erc-once-with-server-event
                          311 `(string= ,nick
@@ -3027,8 +3027,8 @@ The rest of LINE is the message to send."
 (defun erc-cmd-NICK (nick)
   "Change current nickname to NICK."
   (erc-log (format "cmd: NICK: %s (erc-bad-nick: %S)" nick erc-bad-nick))
-  (let ((nicklen (cdr (assoc "NICKLEN" (with-current-buffer (erc-server-buffer)
-                                   erc-server-parameters)))))
+  (let ((nicklen (cdr (assoc "NICKLEN" (erc-with-server-buffer
+                                        erc-server-parameters)))))
     (and nicklen (> (length nick) (string-to-number nicklen))
         (erc-display-message
          nil 'notice 'active 'nick-too-long
@@ -3167,7 +3167,8 @@ the message given by REASON."
    ((string-match "^\\s-*\\(.*\\)$" reason)
     (let* ((s (match-string 1 reason))
           (buffer (erc-server-buffer))
-          (reason (funcall erc-quit-reason (if (equal s "") nil s))))
+          (reason (funcall erc-quit-reason (if (equal s "") nil s)))
+          server-proc)
       (with-current-buffer (if (and buffer
                                    (bufferp buffer))
                               buffer
@@ -3175,10 +3176,18 @@ the message given by REASON."
        (erc-log (format "cmd: QUIT: %s" reason))
        (setq erc-server-quitting t)
        (erc-set-active-buffer (erc-server-buffer))
+       (setq server-proc erc-server-process)
        (erc-server-send (format "QUIT :%s" reason)))
-      (run-hook-with-args 'erc-quit-hook erc-server-process)
+      (run-hook-with-args 'erc-quit-hook server-proc)
       (when erc-kill-queries-on-quit
-       (erc-kill-query-buffers erc-server-process)))
+       (erc-kill-query-buffers server-proc))
+      ;; if the process has not been killed within 4 seconds, kill it
+      (run-at-time 4 nil
+                  (lambda (proc)
+                    (when (and (processp proc)
+                               (memq (process-status proc) '(run open)))
+                      (delete-process proc)))
+                  server-proc))
     t)
    (t nil)))
 
@@ -3189,9 +3198,7 @@ the message given by REASON."
 
 (defun erc-cmd-GQUIT (reason)
   "Disconnect from all servers at once with the same quit REASON."
-  (erc-with-all-buffers-of-server nil #'(lambda ()
-                                         (and (erc-server-buffer-p)
-                                              (erc-server-process-alive)))
+  (erc-with-all-buffers-of-server nil #'erc-open-server-buffer-p
                                  (erc-cmd-QUIT reason)))
 
 (defalias 'erc-cmd-GQ 'erc-cmd-GQUIT)
@@ -3199,8 +3206,17 @@ the message given by REASON."
 
 (defun erc-cmd-RECONNECT ()
   "Try to reconnect to the current IRC server."
-  (setq erc-server-reconnect-count 0)
-  (erc-server-reconnect)
+  (let ((buffer (or (erc-server-buffer) (current-buffer)))
+       (process nil))
+    (with-current-buffer (if (bufferp buffer) buffer (current-buffer))
+      (setq erc-server-quitting nil)
+      (setq erc-server-reconnecting t)
+      (setq erc-server-reconnect-count 0)
+      (setq process (get-buffer-process (erc-server-buffer)))
+      (if process
+         (delete-process process)
+       (erc-server-reconnect))
+      (setq erc-server-reconnecting nil)))
   t)
 
 (defun erc-cmd-SERVER (server)
@@ -3373,7 +3389,7 @@ The ban list is fetched from the server if necessary."
        (setq erc-server-367-functions 'erc-banlist-store
              erc-channel-banlist nil)
        ;; fetch the ban list then callback
-       (with-current-buffer (erc-server-buffer)
+       (erc-with-server-buffer
          (erc-once-with-server-event
           368
           `(with-current-buffer ,chnl-name
@@ -3443,7 +3459,7 @@ Unban all currently banned users in the current channel."
       (let ((old-367-hook erc-server-367-functions))
        (setq erc-server-367-functions 'erc-banlist-store)
       ;; fetch the ban list then callback
-      (with-current-buffer (erc-server-buffer)
+      (erc-with-server-buffer
        (erc-once-with-server-event
         368
         `(with-current-buffer ,chnl
@@ -3737,7 +3753,7 @@ To change how this query window is displayed, use `let' to bind
     (erc-update-mode-line)
     buf))
 
-(defcustom erc-auto-query nil
+(defcustom erc-auto-query 'bury
   "If non-nil, create a query buffer each time you receive a private message.
 
 If the buffer doesn't already exist it is created.  This can be
@@ -3811,7 +3827,7 @@ See also `erc-display-error-notice'."
     (setq erc-nick-change-attempt-count (+ erc-nick-change-attempt-count 1))
     (let ((newnick (nth 1 erc-default-nicks))
          (nicklen (cdr (assoc "NICKLEN"
-                              (with-current-buffer (erc-server-buffer)
+                              (erc-with-server-buffer
                                 erc-server-parameters)))))
       (setq erc-bad-nick t)
       ;; try to use a different nick
@@ -4101,24 +4117,29 @@ See also: `erc-echo-notice-in-user-buffers',
   "Run just after connection.
 
 Set user modes and run `erc-after-connect' hook."
-  (unless erc-server-connected ; only once per session
-    (let ((server (or erc-server-announced-name (erc-response.sender parsed)))
-         (nick (car (erc-response.command-args parsed ))))
-      (setq erc-server-connected t)
-      (erc-update-mode-line)
-      (erc-set-initial-user-mode nick)
-      (erc-server-setup-periodical-server-ping)
-      (run-hook-with-args 'erc-after-connect server nick))))
-
-(defun erc-set-initial-user-mode (nick)
-  "If `erc-user-mode' is non-nil for NICK, set the user modes."
-  (when erc-user-mode
-    (let ((mode (if (functionp erc-user-mode)
-                   (funcall erc-user-mode)
-                 erc-user-mode)))
-      (when (stringp mode)
-       (erc-log (format "changing mode for %s to %s" nick mode))
-       (erc-server-send (format "MODE %s %s" nick mode))))))
+  (with-current-buffer (process-buffer proc)
+    (unless erc-server-connected ; only once per session
+      (let ((server (or erc-server-announced-name
+                       (erc-response.sender parsed)))
+           (nick (car (erc-response.command-args parsed)))
+           (buffer (process-buffer proc)))
+       (setq erc-server-connected t)
+       (erc-update-mode-line)
+       (erc-set-initial-user-mode nick buffer)
+       (erc-server-setup-periodical-ping buffer)
+       (run-hook-with-args 'erc-after-connect server nick)))))
+
+(defun erc-set-initial-user-mode (nick buffer)
+  "If `erc-user-mode' is non-nil for NICK, set the user modes.
+The server buffer is given by BUFFER."
+  (with-current-buffer buffer
+    (when erc-user-mode
+      (let ((mode (if (functionp erc-user-mode)
+                     (funcall erc-user-mode)
+                   erc-user-mode)))
+       (when (stringp mode)
+         (erc-log (format "changing mode for %s to %s" nick mode))
+         (erc-server-send (format "MODE %s %s" nick mode)))))))
 
 (defun erc-display-error-notice (parsed string)
   "Display STRING as an error notice.
@@ -4345,14 +4366,12 @@ If non-nil, return from being away."
                          erc-nick)))
        (cond
         (away-p
-         (erc-with-all-buffers-of-server proc nil
-                                         (setq erc-away (current-time))))
+         (setq erc-away (current-time)))
         (t
          (let ((away-time erc-away))
            ;; away must be set to NIL BEFORE sending anything to prevent
            ;; an infinite recursion
-           (erc-with-all-buffers-of-server proc nil
-                                           (setq erc-away nil))
+           (setq erc-away nil)
            (save-excursion
              (set-buffer (erc-active-buffer))
              (when erc-public-away-p
@@ -5037,8 +5056,9 @@ strings over to the next call."
 
 (defun erc-set-current-nick (nick)
   "Set the current nickname to NICK."
-  (with-current-buffer (or (erc-server-buffer)
-                          (current-buffer))
+  (with-current-buffer (if (buffer-live-p (erc-server-buffer))
+                          (erc-server-buffer)
+                        (current-buffer))
     (setq erc-server-current-nick nick)))
 
 (defun erc-current-nick ()
@@ -5119,7 +5139,7 @@ Takes a full SPEC of a user in the form \"nick!login@host\", and
 matches against all the regexp's in `erc-ignore-list'.  If any
 match, returns that regexp."
   (catch 'found
-    (dolist (ignored (with-current-buffer (erc-server-buffer) erc-ignore-list))
+    (dolist (ignored (erc-with-server-buffer erc-ignore-list))
       (if (string-match ignored spec)
          (throw 'found ignored)))))
 
@@ -5673,12 +5693,12 @@ entry of `channel-members'."
                             ""))
        user))))
 
-(defun erc-away-p ()
-  "Return t if the current ERC process is set away."
-  (save-excursion
-    (and (erc-server-buffer-live-p)
-        (set-buffer (process-buffer erc-server-process))
-        erc-away)))
+(defun erc-away-time ()
+  "Return non-nil if the current ERC process is set away.
+
+In particular, the time that we were set away is returned.
+See `current-time' for details on the time format."
+  (erc-with-server-buffer erc-away))
 
 ;; Mode line handling
 
@@ -5706,9 +5726,17 @@ The following characters are replaced:
   "A string to be formatted and shown in the header-line in `erc-mode'.
 Only used starting in Emacs 21.
 
+Set this to nil if you do not want the header line to be
+displayed.
+
 See `erc-mode-line-format' for which characters are can be used."
   :group 'erc-mode-line-and-header
-  :type 'string)
+  :set (lambda (sym val)
+        (set sym val)
+        (when (fboundp 'erc-update-mode-line)
+          (erc-update-mode-line nil)))
+  :type '(choice (const :tag "Disabled" nil)
+                string))
 
 (defcustom erc-header-line-uses-help-echo-p t
   "Show the contents of the header line in the echo area or as a tooltip
@@ -5734,7 +5762,8 @@ Otherwise, use the `erc-header-line' face."
 
 (defcustom erc-common-server-suffixes
   '(("openprojects.net$" . "OPN")
-    ("freenode.net$" . "OPN"))
+    ("freenode.net$" . "freenode")
+    ("oftc.net$" . "OFTC"))
   "Alist of common server name suffixes.
 This variable is used in mode-line display to save screen
 real estate.  Set it to nil if you want to avoid changing
@@ -5786,9 +5815,7 @@ This should be a string with substitution variables recognized by
 (defun erc-format-away-status ()
   "Return a formatted `erc-mode-line-away-status-format'
 if `erc-away' is non-nil."
-  (let ((a (when (erc-server-buffer-live-p)
-            (with-current-buffer (process-buffer erc-server-process)
-              erc-away))))
+  (let ((a (erc-away-time)))
     (if a
        (format-time-string erc-mode-line-away-status-format a)
       "")))
@@ -5813,9 +5840,7 @@ if `erc-away' is non-nil."
 
 (defun erc-format-lag-time ()
   "Return the estimated lag time to server, `erc-server-lag'."
-  (let ((lag (when (erc-server-buffer-live-p)
-              (with-current-buffer (process-buffer erc-server-process)
-                erc-server-lag))))
+  (let ((lag (erc-with-server-buffer erc-server-lag)))
     (cond (lag (format "lag:%.0f" lag))
          (t ""))))
 
@@ -6137,7 +6162,8 @@ functions."
       (format "%s (%s@%s) has left channel %s%s"
              nick user host channel
              (if (not (string= reason ""))
-                 (format ": %s" reason)
+                 (format ": %s"
+                         (erc-replace-regexp-in-string "%" "%%" reason))
                "")))))
 
 
@@ -6232,6 +6258,13 @@ This function should be on `erc-kill-channel-hook'."
   "Find the next occurrence of the `erc-parsed' text property."
   (text-property-not-all (point-min) (point-max) 'erc-parsed nil))
 
+(defun erc-restore-text-properties ()
+  "Restore the property 'erc-parsed for the region."
+  (let ((parsed-posn (erc-find-parsed-property)))
+    (put-text-property
+     (point-min) (point-max)
+     'erc-parsed (when parsed-posn (erc-get-parsed-vector parsed-posn)))))
+
 (defun erc-get-parsed-vector (point)
   "Return the whole parsed vector on POINT."
   (get-text-property point 'erc-parsed))
@@ -6263,8 +6296,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL."
               (lambda ()
                 (and (string-equal erc-session-server host)
                      (= erc-session-port port)
-                     erc-server-connected
-                     (eq (erc-server-buffer) (current-buffer))))))))
+                     (erc-open-server-buffer-p)))))))
     (with-current-buffer (or server-buffer (current-buffer))
       (if (and server-buffer channel)
          (erc-cmd-JOIN channel)
index 7431f61..bcdbeac 100644 (file)
@@ -1,3 +1,7 @@
+2007-04-01  Michael Olson  <mwolson@gnu.org>
+
+       * erc.texi: Update for the ERC 5.2 release.
+
 2007-03-31  David Kastrup  <dak@gnu.org>
 
        * woman.texi (Topic, Interface Options): Explain changes semantics of
index 60c682b..3f9f506 100644 (file)
@@ -12,7 +12,7 @@
 @syncodeindex fn cp
 
 @copying
-This manual is for ERC version 5.2 stable pre-release.
+This manual is for ERC version 5.2.
 
 Copyright @copyright{} 2005, 2006, 2007 Free Software Foundation, Inc.
 
@@ -21,6 +21,9 @@ Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.2 or
 any later version published by the Free Software Foundation; with no
 Invariant Sections, Front-Cover texts, or Back-Cover Texts.
+
+All Emacs Lisp code contained in this document may be used, distributed,
+and modified without restriction.
 @end quotation
 @end copying
 
@@ -68,12 +71,16 @@ Obtaining ERC
 * Releases::                    Released versions of ERC.
 * Development::                 Latest unreleased development changes.
 
+Getting Started
+
+* Sample Session::              Example of connecting to the #emacs channel
+* Special Features::            Differences from standalone IRC clients
+
 Advanced Usage
 
 * Connecting::                  Ways of connecting to an IRC server.
-* Options::                     Options that are available for ERC.
-* Tips and Tricks::             Ways of enhancing your ERC experience.
 * Sample Configuration::        An example configuration file.
+* Options::                     Options that are available for ERC.
 
 @end detailmenu
 @end menu
@@ -111,8 +118,17 @@ It comes with the following capabilities enabled by default.
 * Development::                 Latest unreleased development changes.
 @end menu
 
-These sections may be skipped if you are using the version of ERC that
-comes with Emacs.
+Note that some ERC files are not included with Emacs due to copyright or
+dependency issues.  If desired, they may be found at the following
+locations, or from your local GNU mirror.
+
+@itemize @bullet
+@item @uref{http://ftp.gnu.org/gnu/erc/erc-5.2-extras.tar.gz}
+@item @uref{http://ftp.gnu.org/gnu/erc/erc-5.2-extras.zip}
+@end itemize
+
+The rest of this chapter may be skipped if you are using the version of
+ERC that comes with Emacs.
 
 @node Releases, Development, Obtaining ERC, Obtaining ERC
 @comment  node-name,  next,  previous,  up
@@ -131,7 +147,7 @@ available in the official Debian repository.
 
 @cindex releases, from source
 Alternatively, you can download the latest release from
-@uref{http://ftp.gnu.org/gnu/erc}.
+@uref{http://ftp.gnu.org/gnu/erc}, or your local GNU mirror.
 
 @node Development,  , Releases, Obtaining ERC
 @comment  node-name,  next,  previous,  up
@@ -188,9 +204,9 @@ tla update
 
 @end enumerate
 
-If you are new to Arch and want to learn more about developing with it,
-you might find this tutorial helpful:
-@uref{http://www.mwolson.org/projects/ArchTutorial.html}.
+If you are new to Arch and want to learn more about developing ERC with
+it, visit @uref{http://emacswiki.org/cgi-bin/wiki/ErcDevelopment} for
+full instructions.
 
 @subheading Development snapshots
 
@@ -261,8 +277,6 @@ locations that require this.
 @chapter Getting Started
 @cindex settings
 
-@c PRE5_2: Mention .ercrc.el
-
 To use ERC, add the directory containing its files to your
 @code{load-path} variable, in your @file{.emacs} file.  Then, load ERC
 itself.  An example follows.
@@ -274,20 +288,151 @@ itself.  An example follows.
 Once ERC is loaded, the command @kbd{M-x erc} will start ERC and
 prompt for the server to connect to.
 
+If you want to place ERC settings in their own file, you can place them
+in @file{~/.emacs.d/.ercrc.el}, creating it if necessary.
+
+If you would rather use the Customize interface to change how ERC works,
+do @kbd{M-x customize-group RET erc RET}.  In particular, ERC comes with
+lots of modules that may be enabled or disabled; to select which ones
+you want, do @kbd{M-x customize-variable RET erc-modules RET}.
+
+@menu
+* Sample Session::              Example of connecting to the #emacs channel
+* Special Features::            Differences from standalone IRC clients
+@end menu
+
+@node Sample Session, Special Features, Getting Started, Getting Started
+@comment  node-name,  next,  previous,  up
+@section Sample Session
+
+This is an example ERC session which shows how to connect to the #emacs
+channel on Freenode.  Another IRC channel on Freenode that may be of
+interest is #erc, which is a channel where ERC users and developers hang
+out.
+
+@itemize @bullet
+
+@item Connect to Freenode
+
+Run @kbd{M-x erc}.  Use ``irc.freenode.net'' as the IRC server, ``6667''
+as the port, and choose a nickname.
+
+@item Get used to the interface
+
+Switch to the ``irc.freenode.net:6667'' buffer, if you're not already
+there.  You will see first some messages about checking for ident, and
+then a bunch of other messages that describe the current IRC server.
+
+@item Join the #emacs channel
+
+In that buffer, type ``/join SPC #emacs'' and hit @kbd{RET}.  Depending
+on how you've set up ERC, either a new buffer for ``#emacs'' will be
+displayed, or a new buffer called ``#emacs'' will be created in the
+background.  If the latter, switch to the ``#emacs'' buffer.  You will
+see the channel topic and a list of the people who are currently on the
+channel.
+
+@item Register your nickname with Freenode
+
+If you would like to be able to talk with people privately on the
+Freenode network, you will have to ``register'' your nickname.  To do
+so, switch to the ``irc.freenode.net:6667'' buffer and type ``/msg
+NickServ register <password>'', replacing ``<password>'' with your
+desired password.  It should tell you that the operation was successful.
+
+@item Talk to people in the channel
+
+If you switch back to the ``#emacs'' buffer, you can type a message, and
+everyone on the channel will see it.
+
+@item Open a query buffer to talk to someone
+
+If you want to talk with someone in private (this should usually not be
+done for technical help, only for personal questions), type ``/query
+<nick>'', replacing ``<nick>'' with the nickname of the person you would
+like to talk to.  Depending on how ERC is set up, you will either see a
+new buffer with the name of the person, or such a buffer will be created
+in the background and you will have to switch to it.  Begin typing
+messages, and you will be able to have a conversation.
+
+Note that if the other person is not registered, you will not be able to
+talk with them.
+
+@end itemize
+
+@node Special Features, , Sample Session, Getting Started
+@comment  node-name,  next,  previous,  up
+@section Special Features
+
+ERC has some features that distinguish it from some IRC clients.
+
+@itemize @bullet
+
+@item multiple channels and multiple servers
+
+Every channel is put in a separate buffer.  Several IRC servers may be
+connected to at the same time.
+
+@cindex query buffers
+@item private message separation
+
+Private conversations are treated as channels, and are put into separate
+buffers in Emacs.  We call these ``query buffers''.
+
+@item highlighting
+
+Some occurences of words can be highlighted, which makes it easier to
+track different kinds of conversations.
+
+@item notification
+
+ERC can notify you that certain users are online.
+
+@item channel tracking
+
+Channels can be hidden and conversation continue in the background.  You
+are notified when something is said in such a channel that is not
+currently visible.  This makes it easy to get Real Work done while still
+maintaining an IRC presence.
+
+@item nick completion
+
+ERC can complete words upon hitting @kbd{TAB}, which eases the writing
+of nicknames in messages.
+
+@cindex history ring
+@item history
+
+Past actions are kept in history rings for future use.  To navigate a
+history ring, hit @kbd{M-p} to go backwards and @kbd{M-n} to go
+forwards.
+
+@item multiple languages
+
+Different channels and servers may have different language encodings.
+
+In addition, it is possible to translate the messages that ERC uses into
+multiple languages.  Please contact the developers of ERC at
+@email{erc-discuss@@gnu.org} if you are interested in helping with the
+translation effort.
+
+@item user scripting
+
+Users can load scripts (e.g. auto greeting scripts) when ERC starts up.
+
+It is also possible to make custom IRC commands, if you know a little
+Emacs Lisp.  Just make an Emacs Lisp function and call it
+@code{erc-cmd-NEWCOMMAND}, where @code{NEWCOMMAND} is the name of the
+new command in capital letters.
+
+@item auto reconnect
+
 If the connection goes away at some point, ERC will try to reconnect
 automatically.  If it fails to reconnect, and you want to try to
 manually reestablish the connection at some later point, switch to an
-ERC buffer and run the /RECONNECT command.
+ERC  buffer and run the @code{/RECONNECT} command.
 
-@c PRE5_2: Sample session, including:
-@c - connect to Freenode
-@c - /join #emacs
-@c - see messages flying past, point out topic lines, messages, channel
-@c   members
-@c - identifying your nick with NickServ (most IRC servers have this)
-@c - talking to the channel
-@c - open a /query buffer to talk to someone (must identify first in
-@c   FreeNode)
+@end itemize
 
 
 @node Keystroke Summary, Modules, Getting Started, Top
@@ -439,6 +584,10 @@ Save buffers in logs
 @item match
 Highlight pals, fools, and other keywords
 
+@cindex modules, menu
+@item menu
+Display a menu in ERC buffers
+
 @cindex modules, netsplit
 @item netsplit
 Detect netsplits
@@ -505,7 +654,7 @@ Translate morse code in messages
 
 @end table
 
-@c PRE5_2: Document every option of every module in its own subnode
+@c PRE5_3: Document every option of every module in its own subnode
 
 
 @node Advanced Usage, Getting Help and Reporting Bugs, Modules, Top
@@ -515,12 +664,11 @@ Translate morse code in messages
 
 @menu
 * Connecting::                  Ways of connecting to an IRC server.
-* Options::                     Options that are available for ERC.
-* Tips and Tricks::             Ways of enhancing your ERC experience.
 * Sample Configuration::        An example configuration file.
+* Options::                     Options that are available for ERC.
 @end menu
 
-@node Connecting, Options, Advanced Usage, Advanced Usage
+@node Connecting, Sample Configuration, Advanced Usage, Advanced Usage
 @comment  node-name,  next,  previous,  up
 @section Connecting to an IRC Server
 @cindex connecting
@@ -654,33 +802,97 @@ User full name.
 This can be either a string or a function to call.
 @end defopt
 
-@node Options, Tips and Tricks, Connecting, Advanced Usage
+@node Sample Configuration, Options, Connecting, Advanced Usage
 @comment  node-name,  next,  previous,  up
-@section Options
-@cindex options
+@section Sample Configuration
+@cindex configuration, sample
 
-@c PRE5_2: (Node) Document every ERC option (module options go in
-@c previous chapter)
+Here is an example of configuration settings for ERC.  This can go into
+your Emacs configuration file.  Everything after the @code{(require
+'erc)} command can optionally go into @file{~/.emacs.d/.ercrc.el}.
 
-This section has not yet been written.
+@lisp
+;;; Sample ERC configuration
 
-@node Tips and Tricks, Sample Configuration, Options, Advanced Usage
-@comment  node-name,  next,  previous,  up
-@section Tips and Tricks
-@cindex tips and tricks
+;; Add the ERC directory to load path -- you don't need this if you are
+;; using the version of ERC that comes with Emacs
+(add-to-list 'load-path "~/elisp/erc")
 
-@c PRE5_2: (Node) Tips and tricks
+;; Load ERC
+(require 'erc)
 
-This section has not yet been written.
+;; Load authentication info from an external source.  Put sensitive
+;; passwords and the like in here.
+(load "~/.emacs.d/.erc-auth")
+
+;; This is an example of how to make a new command.  Type "/uptime" to
+;; use it.
+(defun erc-cmd-UPTIME (&rest ignore)
+  "Display the uptime of the system, as well as some load-related
+stuff, to the current ERC buffer."
+  (let ((uname-output
+         (replace-regexp-in-string
+          ", load average: " "] @{Load average@} ["
+          ;; Collapse spaces, remove
+          (replace-regexp-in-string
+           " +" " "
+           ;; Remove beginning and trailing whitespace
+           (replace-regexp-in-string
+            "^ +\\|[ \n]+$" ""
+            (shell-command-to-string "uptime"))))))
+    (erc-send-message
+     (concat "@{Uptime@} [" uname-output "]"))))
+
+;; This causes ERC to connect to the Freenode network upon hitting
+;; C-c e f.  Replace MYNICK with your IRC nick.
+(global-set-key "\C-cef" (lambda () (interactive)
+                           (erc :server "irc.freenode.net" :port "6667"
+                                :nick "MYNICK")))
+
+;; This causes ERC to connect to the IRC server on your own machine (if
+;; you have one) upon hitting C-c e b.  Replace MYNICK with your IRC
+;; nick.  Often, people like to run bitlbee (http://bitlbee.org/) as an
+;; AIM/Jabber/MSN to IRC gateway, so that they can use ERC to chat with
+;; people on those networks.
+(global-set-key "\C-ceb" (lambda () (interactive)
+                           (erc :server "localhost" :port "6667"
+                                :nick "MYNICK")))
+
+;; Make C-c RET (or C-c C-RET) send messages instead of RET. This has
+;; been commented out to avoid confusing new users.
+;; (define-key erc-mode-map (kbd "RET") nil)
+;; (define-key erc-mode-map (kbd "C-c RET") 'erc-send-current-line)
+;; (define-key erc-mode-map (kbd "C-c C-RET") 'erc-send-current-line)
+
+;;; Options
+
+;; Join the #emacs and #erc channels whenever connecting to Freenode.
+(setq erc-autojoin-channels-alist '(("freenode.net" "#emacs" "#erc")))
+
+;; Interpret mIRC-style color commands in IRC chats
+(setq erc-interpret-mirc-color t)
+
+;; The following are commented out by default, but users of other
+;; non-Emacs IRC clients might find them useful.
+;; Kill buffers for channels after /part
+;; (setq erc-kill-buffer-on-part t)
+;; Kill buffers for private queries after quitting the server
+;; (setq erc-kill-queries-on-quit t)
+;; Kill buffers for server messages after quitting the server
+;; (setq erc-kill-server-buffer-on-quit t)
+@end lisp
 
-@node Sample Configuration, , Tips and Tricks, Advanced Usage
+@node Options, , Sample Configuration, Advanced Usage
 @comment  node-name,  next,  previous,  up
-@section Sample Configuration
-@cindex configuration, sample
+@section Options
+@cindex options
 
-@c PRE5_2: (Node) Sample configs
+@c PRE5_3: (Node) Document every ERC option (module options go in
+@c previous chapter)
 
-This section has not yet been written.
+This section has not yet been written.  For now, the easiest way to
+check out the available option for ERC is to do
+@kbd{M-x customize-group erc RET}.
 
 
 @node Getting Help and Reporting Bugs, History, Advanced Usage, Top