Commits

adrian  committed b7ef514

packages: Sync erc package with upstream version 1.671

-------------------- ChangeLog entries follow: --------------------

xemacs-packages/erc/ChangeLog addition:

2004-06-13 Adrian Aichner <adrian@xemacs.org>

* ChangeLog: Typo fix.
* ChangeLog.upstream: Full sync with upstream erc version 1.671.
* Makefile.upstream (erc-auto.el): Ditto.
* erc-autoaway.el (erc-autoaway-version): Ditto.
* erc-autoaway.el (autoaway): Ditto.
* erc-autojoin.el: Ditto.
* erc-autojoin.el (erc-autojoin-version): Ditto.
* erc-autojoin.el (autojoin): Ditto.
* erc-autojoin.el (erc-autojoin-add): Ditto.
* erc-autojoin.el (erc-autojoin-remove): Ditto.
* erc-bbdb.el (erc-bbdb-version): Ditto.
* erc-bbdb.el (erc-bbdb-whois): Ditto.
* erc-bbdb.el (erc-bbdb-JOIN): Ditto.
* erc-bbdb.el (erc-bbdb-NICK): Ditto.
* erc-bbdb.el (BBDB): Ditto.
* erc-button.el (erc-button-version): Ditto.
* erc-dcc.el (erc-dcc-version): Ditto.
* erc-dcc.el (erc-dcc-do-GET-command): Ditto.
* erc-dcc.el (erc-dcc-no-such-nick): Ditto.
* erc-dcc.el (erc-server-401-functions): Ditto.
* erc-ezbounce.el (erc-ezb-version): Ditto.
* erc-ezbounce.el (erc-ezb-notice-autodetect): Ditto.
* erc-ezbounce.el (erc-ezb-initialize): Ditto.
* erc-fill.el (erc-fill-version): Ditto.
* erc-fill.el (erc-fill-variable): Ditto.
* erc-list.el: Ditto.
* erc-list.el ((fboundp 'make-overlay)): Ditto.
* erc-list.el (erc-chanlist-frame-parameters): Ditto.
* erc-list.el (erc-chanlist-header-face): Ditto.
* erc-list.el (erc-chanlist-highlight-face): New.
* erc-list.el (erc-chanlist-highlight-overlay): New.
* erc-list.el (erc-cmd-LIST): Full sync.
* erc-list.el (erc-chanlist): Ditto.
* erc-list.el (erc-chanlist-322): Ditto.
* erc-list.el (erc-chanlist-post-command-hook): Ditto.
* erc-list.el (erc-chanlist-highlight-line): Ditto.
* erc-list.el (erc-chanlist-dehighlight-line): New.
* erc-log.el: Full sync.
* erc-log.el (erc-log-version): New.
* erc-log.el (erc-enable-logging): Full sync.
* erc-log.el (log): Ditto.
* erc-log.el (erc-mode-map): New.
* erc-log.el (erc-log-setup-logging): Full sync.
* erc-log.el (erc-log-all-but-server-buffers): Ditto.
* erc-log.el (erc-conditional-save-buffer): Ditto.
* erc-log.el (erc-conditional-save-queries): Ditto.
* erc-log.el (erc-current-logfile): Ditto.
* erc-log.el (erc-generate-log-file-name-with-date): Ditto.
* erc-log.el (erc-generate-log-file-name-short): Ditto.
* erc-log.el (erc-save-buffer-in-logs): Ditto.
* erc-match.el (erc-match-version): Ditto.
* erc-match.el (erc-get-parsed-vector-nick): Ditto.
* erc-match.el (erc-get-parsed-vector-type): Ditto.
* erc-match.el (erc-server-305-functions): Ditto.
* erc-menu.el: Ditto.
* erc-menu.el (erc-menu-version): Ditto.
* erc-menu.el (erc-menu-definition): Ditto.
* erc-nets.el (erc-nets-version): Ditto.
* erc-nets.el (erc-server-375-functions): Ditto.
* erc-netsplit.el (erc-netsplit-version): Ditto.
* erc-netsplit.el (netsplit): Ditto.
* erc-netsplit.el (erc-netsplit-JOIN): Ditto.
* erc-netsplit.el (erc-netsplit-MODE): Ditto.
* erc-netsplit.el (erc-netsplit-QUIT): Ditto.
* erc-nickserv.el: Ditto.
* erc-nickserv.el (erc-nickserv-version): Ditto.
* erc-nickserv.el (services): Ditto.
* erc-nickserv.el (erc-nickserv-identify-mode): Ditto.
* erc-nickserv.el (erc-nickserv-identify-autodetect): Ditto.
* erc-notify.el (notify): Ditto.
* erc-notify.el (erc-notify-timer): Ditto.
* erc-notify.el (erc-notify-JOIN): Ditto.
* erc-notify.el (erc-notify-NICK): Ditto.
* erc-notify.el (erc-notify-QUIT): Ditto.
* erc-sound.el: Ditto.
* erc-speedbar.el: Ditto.
* erc-speedbar.el (nil): Ditto.
* erc-speedbar.el (erc-speedbar-version): New.
* erc-speedbar.el (erc-speedbar-goto-buffer): Full sync.
* erc-track.el (erc-track-version): Ditto.
* erc-track.el (track-when-inactive): Ditto.
* erc.el: Ditto.
* erc.el (erc-backend): Ditto.
* erc.el (erc-version-string): Ditto.
* erc.el (erc-disconnected-hook): Ditto.
* erc.el (erc-join-hook): Ditto.
* erc.el (erc-quit-hook): Ditto.
* erc.el (erc-part-hook): Ditto.
* erc.el (erc-kick-hook): Ditto.
* erc.el (erc-channel-user-op-p): Ditto.
* erc.el (erc-channel-user-voice-p): Ditto.
* erc.el (erc-debug-log-file): Ditto.
* erc.el (erc-once-with-server-event): Ditto.
* erc.el (erc-once-with-server-event-global): Ditto.
* erc.el (erc-server-buffer): Ditto.
* erc.el (erc-server-buffer-live-p): New.
* erc.el (erc-log-irc-protocol): Full sync.
* erc.el (erc-toggle-debug-irc-protocol): Ditto.
* erc.el (erc-process-filter): Ditto.
* erc.el (erc-display-line): Ditto.
* erc.el (erc-message-type-member): Ditto.
* erc.el (erc-cmd-JOIN): Ditto.
* erc.el (erc-cmd-IDLE): Ditto.
* erc.el (erc-cmd-TIME): Ditto.
* erc.el (channel-banlist): Ditto.
* erc.el (erc-server-364-hook): Removed.
* erc.el (erc-server-365-hook): Removed.
* erc.el (erc-server-367-hook): Removed.
* erc.el (erc-server-368-hook): Removed.
* erc.el (erc-cmd-BANLIST): Full sync.
* erc.el (erc-cmd-MASSUNBAN): Ditto.
* erc.el (erc-join-channel): Ditto.
* erc.el (erc-duplicates): Ditto.
* erc.el (erc-call-hooks): Removed.
* erc.el (erc-query): Full sync.
* erc.el (erc-parse-line-from-server): Removed.
* erc.el (erc-display-server-message): Full sync.
* erc.el (erc-server-hook-list): Removed.
* erc.el (erc-send-ping-interval): Full sync.
* erc.el (erc-auto-query): Ditto.
* erc.el (erc-server-ERROR): Removed.
* erc.el (erc-server-INVITE): Removed.
* erc.el (erc-server-JOIN): Removed.
* erc.el (erc-server-KICK): Removed.
* erc.el (erc-server-version): Full sync.
* erc.el (erc-server-PRIVMSG-or-NOTICE): Removed.
* erc.el (erc-banlist-store): Full sync.
* erc.el (erc-server-KILL-hook): Removed.
* erc.el (erc-banlist-finished): Full sync.
* erc.el (erc-server-MODE): Removed.
* erc.el (erc-banlist-update): Full sync.
* erc.el (erc-server-NICK): Removed.
* erc.el (erc-server-QUIT): Removed.
* erc.el (erc-server-TOPIC): Removed.
* erc.el (erc-server-PART): Removed.
* erc.el (erc-connection-established): Full sync.
* erc.el (erc-server-MOTD): Removed.
* erc.el (erc-server-WALLOPS): Removed.
* erc.el (erc-server-001): Removed.
* erc.el (erc-server-PING): Removed.
* erc.el (erc-display-error-notice): Full sync.
* erc.el (erc-server-379): Removed.
* erc.el (erc-process-ctcp-query): Full sync.
* erc.el (erc-server-401): Removed.
* erc.el (erc-server-381-hook): Removed.
* erc.el (erc-server-382-hook): Removed.
* erc.el (erc-server-391-hook): Removed.
* erc.el (erc-server-004): Removed.
* erc.el (erc-server-392-hook): Removed.
* erc.el (erc-server-PONG-hook): Removed.
* erc.el (erc-server-393-hook): Removed.
* erc.el (erc-server-394-hook): Removed.
* erc.el (erc-server-395-hook): Removed.
* erc.el (erc-server-402-hook): Removed.
* erc.el (erc-server-403): Removed.
* erc.el (erc-server-PONG): Removed.
* erc.el (erc-server-005): Removed.
* erc.el (erc-server-404-hook): Removed.
* erc.el (erc-server-405): Removed.
* erc.el (erc-server-406): Removed.
* erc.el (erc-server-407-hook): Removed.
* erc.el (erc-server-409-hook): Removed.
* erc.el (erc-server-411-hook): Removed.
* erc.el (erc-server-412): Removed.
* erc.el (erc-server-200-hook): Removed.
* erc.el (erc-server-201-hook): Removed.
* erc.el (erc-server-202-hook): Removed.
* erc.el (erc-server-413-hook): Removed.
* erc.el (erc-server-203-hook): Removed.
* erc.el (erc-server-414-hook): Removed.
* erc.el (erc-server-204-hook): Removed.
* erc.el (erc-server-415-hook): Removed.
* erc.el (erc-server-205-hook): Removed.
* erc.el (erc-server-206-hook): Removed.
* erc.el (erc-server-421): Removed.
* erc.el (erc-server-208-hook): Removed.
* erc.el (erc-server-209-hook): Removed.
* erc.el (erc-server-211-hook): Removed.
* erc.el (erc-server-212-hook): Removed.
* erc.el (erc-server-213-hook): Removed.
* erc.el (erc-server-214-hook): Removed.
* erc.el (erc-server-215-hook): Removed.
* erc.el (erc-server-422-hook): Removed.
* erc.el (erc-server-216-hook): Removed.
* erc.el (erc-server-423-hook): Removed.
* erc.el (erc-server-217-hook): Removed.
* erc.el (erc-server-424-hook): Removed.
* erc.el (erc-server-218-hook): Removed.
* erc.el (erc-server-431-hook): Removed.
* erc.el (erc-server-219-hook): Removed.
* erc.el (erc-server-432): Removed.
* erc.el (erc-server-221): Removed.
* erc.el (erc-server-433): Removed.
* erc.el (erc-server-241-hook): Removed.
* erc.el (erc-server-242-hook): Removed.
* erc.el (erc-server-243-hook): Removed.
* erc.el (erc-server-436-hook): Removed.
* erc.el (erc-server-244-hook): Removed.
* erc.el (erc-server-249-hook): Removed.
* erc.el (erc-server-437-hook): Removed.
* erc.el (erc-server-252): Removed.
* erc.el (erc-server-437): Removed.
* erc.el (erc-server-441-hook): Removed.
* erc.el (erc-server-253): Removed.
* erc.el (erc-server-442): Removed.
* erc.el (erc-server-254): Removed.
* erc.el (erc-server-443-hook): Removed.
* erc.el (erc-server-444-hook): Removed.
* erc.el (erc-server-445-hook): Removed.
* erc.el (erc-server-446-hook): Removed.
* erc.el (erc-server-451-hook): Removed.
* erc.el (erc-server-261-hook): Removed.
* erc.el (erc-server-461): Removed.
* erc.el (erc-server-262-hook): Removed.
* erc.el (erc-server-301): Removed.
* erc.el (erc-server-462-hook): Removed.
* erc.el (erc-server-463-hook): Removed.
* erc.el (erc-server-464-hook): Removed.
* erc.el (erc-server-465-hook): Removed.
* erc.el (erc-server-302-hook): Removed.
* erc.el (erc-server-467-hook): Removed.
* erc.el (erc-server-471-hook): Removed.
* erc.el (erc-server-303): Removed.
* erc.el (erc-server-472-hook): Removed.
* erc.el (erc-server-473-hook): Removed.
* erc.el (erc-server-474): Removed.
* erc.el (erc-server-305): Removed.
* erc.el (erc-server-475): Removed.
* erc.el (erc-server-306): Removed.
* erc.el (erc-server-477): Removed.
* erc.el (erc-process-ctcp-reply): Full sync.
* erc.el (erc-server-311-or-314): Removed.
* erc.el (erc-server-481): Removed.
* erc.el (erc-server-482): Removed.
* erc.el (erc-server-312): Removed.
* erc.el (erc-server-483-hook): Removed.
* erc.el (erc-server-491-hook): Removed.
* erc.el (erc-server-501): Removed.
* erc.el (erc-server-502-hook): Removed.
* erc.el (erc-server-313): Removed.
* erc.el (erc-server-317): Removed.
* erc.el (erc-server-319): Removed.
* erc.el (erc-server-320): Removed.
* erc.el (erc-server-321): Removed.
* erc.el (erc-server-322): Removed.
* erc.el (erc-server-323-hook): Removed.
* erc.el (erc-server-324): Removed.
* erc.el (erc-server-329): Removed.
* erc.el (erc-server-330): Removed.
* erc.el (erc-server-331): Removed.
* erc.el (erc-server-332): Removed.
* erc.el (erc-server-333): Removed.
* erc.el (erc-server-341): Removed.
* erc.el (erc-server-342-hook): Removed.
* erc.el (erc-server-351-hook): Removed.
* erc.el (erc-server-352): Removed.
* erc.el (erc-server-353): Removed.
* erc.el (erc-server-366): Removed.
* erc.el (erc-update-channel-info-buffer): Full sync.
* erc.el (erc-send-current-line): Ditto.
* erc.el (erc-find-file): Ditto.
* erc.el (erc-away-p): Ditto.
* erc.el (erc-mode-line-format): Ditto.
* erc.el (erc-prepare-mode-line-format): Ditto.

  • Participants
  • Parent commits 098acac

Comments (0)

Files changed (21)

+2004-06-13  Adrian Aichner  <adrian@xemacs.org>
+
+	* ChangeLog: Typo fix.
+	* ChangeLog.upstream: Full sync with upstream erc version 1.671.
+	* Makefile.upstream (erc-auto.el): Ditto.
+	* erc-autoaway.el (erc-autoaway-version): Ditto.
+	* erc-autoaway.el (autoaway): Ditto.
+	* erc-autojoin.el: Ditto.
+	* erc-autojoin.el (erc-autojoin-version): Ditto.
+	* erc-autojoin.el (autojoin): Ditto.
+	* erc-autojoin.el (erc-autojoin-add): Ditto.
+	* erc-autojoin.el (erc-autojoin-remove): Ditto.
+	* erc-bbdb.el (erc-bbdb-version): Ditto.
+	* erc-bbdb.el (erc-bbdb-whois): Ditto.
+	* erc-bbdb.el (erc-bbdb-JOIN): Ditto.
+	* erc-bbdb.el (erc-bbdb-NICK): Ditto.
+	* erc-bbdb.el (BBDB): Ditto.
+	* erc-button.el (erc-button-version): Ditto.
+	* erc-dcc.el (erc-dcc-version): Ditto.
+	* erc-dcc.el (erc-dcc-do-GET-command): Ditto.
+	* erc-dcc.el (erc-dcc-no-such-nick): Ditto.
+	* erc-dcc.el (erc-server-401-functions): Ditto.
+	* erc-ezbounce.el (erc-ezb-version): Ditto.
+	* erc-ezbounce.el (erc-ezb-notice-autodetect): Ditto.
+	* erc-ezbounce.el (erc-ezb-initialize): Ditto.
+	* erc-fill.el (erc-fill-version): Ditto.
+	* erc-fill.el (erc-fill-variable): Ditto.
+	* erc-list.el: Ditto.
+	* erc-list.el ((fboundp 'make-overlay)): Ditto.
+	* erc-list.el (erc-chanlist-frame-parameters): Ditto.
+	* erc-list.el (erc-chanlist-header-face): Ditto.
+	* erc-list.el (erc-chanlist-highlight-face): New.
+	* erc-list.el (erc-chanlist-highlight-overlay): New.
+	* erc-list.el (erc-cmd-LIST): Full sync.
+	* erc-list.el (erc-chanlist): Ditto.
+	* erc-list.el (erc-chanlist-322): Ditto.
+	* erc-list.el (erc-chanlist-post-command-hook): Ditto.
+	* erc-list.el (erc-chanlist-highlight-line): Ditto.
+	* erc-list.el (erc-chanlist-dehighlight-line): New.
+	* erc-log.el: Full sync.
+	* erc-log.el (erc-log-version): New.
+	* erc-log.el (erc-enable-logging): Full sync.
+	* erc-log.el (log): Ditto.
+	* erc-log.el (erc-mode-map): New.
+	* erc-log.el (erc-log-setup-logging): Full sync.
+	* erc-log.el (erc-log-all-but-server-buffers): Ditto.
+	* erc-log.el (erc-conditional-save-buffer): Ditto.
+	* erc-log.el (erc-conditional-save-queries): Ditto.
+	* erc-log.el (erc-current-logfile): Ditto.
+	* erc-log.el (erc-generate-log-file-name-with-date): Ditto.
+	* erc-log.el (erc-generate-log-file-name-short): Ditto.
+	* erc-log.el (erc-save-buffer-in-logs): Ditto.
+	* erc-match.el (erc-match-version): Ditto.
+	* erc-match.el (erc-get-parsed-vector-nick): Ditto.
+	* erc-match.el (erc-get-parsed-vector-type): Ditto.
+	* erc-match.el (erc-server-305-functions): Ditto.
+	* erc-menu.el: Ditto.
+	* erc-menu.el (erc-menu-version): Ditto.
+	* erc-menu.el (erc-menu-definition): Ditto.
+	* erc-nets.el (erc-nets-version): Ditto.
+	* erc-nets.el (erc-server-375-functions): Ditto.
+	* erc-netsplit.el (erc-netsplit-version): Ditto.
+	* erc-netsplit.el (netsplit): Ditto.
+	* erc-netsplit.el (erc-netsplit-JOIN): Ditto.
+	* erc-netsplit.el (erc-netsplit-MODE): Ditto.
+	* erc-netsplit.el (erc-netsplit-QUIT): Ditto.
+	* erc-nickserv.el: Ditto.
+	* erc-nickserv.el (erc-nickserv-version): Ditto.
+	* erc-nickserv.el (services): Ditto.
+	* erc-nickserv.el (erc-nickserv-identify-mode): Ditto.
+	* erc-nickserv.el (erc-nickserv-identify-autodetect): Ditto.
+	* erc-notify.el (notify): Ditto.
+	* erc-notify.el (erc-notify-timer): Ditto.
+	* erc-notify.el (erc-notify-JOIN): Ditto.
+	* erc-notify.el (erc-notify-NICK): Ditto.
+	* erc-notify.el (erc-notify-QUIT): Ditto.
+	* erc-sound.el: Ditto.
+	* erc-speedbar.el: Ditto.
+	* erc-speedbar.el (nil): Ditto.
+	* erc-speedbar.el (erc-speedbar-version): New.
+	* erc-speedbar.el (erc-speedbar-goto-buffer): Full sync.
+	* erc-track.el (erc-track-version): Ditto.
+	* erc-track.el (track-when-inactive): Ditto.
+	* erc.el: Ditto.
+	* erc.el (erc-backend): Ditto.
+	* erc.el (erc-version-string): Ditto.
+	* erc.el (erc-disconnected-hook): Ditto.
+	* erc.el (erc-join-hook): Ditto.
+	* erc.el (erc-quit-hook): Ditto.
+	* erc.el (erc-part-hook): Ditto.
+	* erc.el (erc-kick-hook): Ditto.
+	* erc.el (erc-channel-user-op-p): Ditto.
+	* erc.el (erc-channel-user-voice-p): Ditto.
+	* erc.el (erc-debug-log-file): Ditto.
+	* erc.el (erc-once-with-server-event): Ditto.
+	* erc.el (erc-once-with-server-event-global): Ditto.
+	* erc.el (erc-server-buffer): Ditto.
+	* erc.el (erc-server-buffer-live-p): New.
+	* erc.el (erc-log-irc-protocol): Full sync.
+	* erc.el (erc-toggle-debug-irc-protocol): Ditto.
+	* erc.el (erc-process-filter): Ditto.
+	* erc.el (erc-display-line): Ditto.
+	* erc.el (erc-message-type-member): Ditto.
+	* erc.el (erc-cmd-JOIN): Ditto.
+	* erc.el (erc-cmd-IDLE): Ditto.
+	* erc.el (erc-cmd-TIME): Ditto.
+	* erc.el (channel-banlist): Ditto.
+	* erc.el (erc-server-364-hook): Removed.
+	* erc.el (erc-server-365-hook): Removed.
+	* erc.el (erc-server-367-hook): Removed.
+	* erc.el (erc-server-368-hook): Removed.
+	* erc.el (erc-cmd-BANLIST): Full sync.
+	* erc.el (erc-cmd-MASSUNBAN): Ditto.
+	* erc.el (erc-join-channel): Ditto.
+	* erc.el (erc-duplicates): Ditto.
+	* erc.el (erc-call-hooks): Removed.
+	* erc.el (erc-query): Full sync.
+	* erc.el (erc-parse-line-from-server): Removed.
+	* erc.el (erc-display-server-message): Full sync.
+	* erc.el (erc-server-hook-list): Removed.
+	* erc.el (erc-send-ping-interval): Full sync.
+	* erc.el (erc-auto-query): Ditto.
+	* erc.el (erc-server-ERROR): Removed.
+	* erc.el (erc-server-INVITE): Removed.
+	* erc.el (erc-server-JOIN): Removed.
+	* erc.el (erc-server-KICK): Removed.
+	* erc.el (erc-server-version): Full sync.
+	* erc.el (erc-server-PRIVMSG-or-NOTICE): Removed.
+	* erc.el (erc-banlist-store): Full sync.
+	* erc.el (erc-server-KILL-hook): Removed.
+	* erc.el (erc-banlist-finished): Full sync.
+	* erc.el (erc-server-MODE): Removed.
+	* erc.el (erc-banlist-update): Full sync.
+	* erc.el (erc-server-NICK): Removed.
+	* erc.el (erc-server-QUIT): Removed.
+	* erc.el (erc-server-TOPIC): Removed.
+	* erc.el (erc-server-PART): Removed.
+	* erc.el (erc-connection-established): Full sync.
+	* erc.el (erc-server-MOTD): Removed.
+	* erc.el (erc-server-WALLOPS): Removed.
+	* erc.el (erc-server-001): Removed.
+	* erc.el (erc-server-PING): Removed.
+	* erc.el (erc-display-error-notice): Full sync.
+	* erc.el (erc-server-379): Removed.
+	* erc.el (erc-process-ctcp-query): Full sync.
+	* erc.el (erc-server-401): Removed.
+	* erc.el (erc-server-381-hook): Removed.
+	* erc.el (erc-server-382-hook): Removed.
+	* erc.el (erc-server-391-hook): Removed.
+	* erc.el (erc-server-004): Removed.
+	* erc.el (erc-server-392-hook): Removed.
+	* erc.el (erc-server-PONG-hook): Removed.
+	* erc.el (erc-server-393-hook): Removed.
+	* erc.el (erc-server-394-hook): Removed.
+	* erc.el (erc-server-395-hook): Removed.
+	* erc.el (erc-server-402-hook): Removed.
+	* erc.el (erc-server-403): Removed.
+	* erc.el (erc-server-PONG): Removed.
+	* erc.el (erc-server-005): Removed.
+	* erc.el (erc-server-404-hook): Removed.
+	* erc.el (erc-server-405): Removed.
+	* erc.el (erc-server-406): Removed.
+	* erc.el (erc-server-407-hook): Removed.
+	* erc.el (erc-server-409-hook): Removed.
+	* erc.el (erc-server-411-hook): Removed.
+	* erc.el (erc-server-412): Removed.
+	* erc.el (erc-server-200-hook): Removed.
+	* erc.el (erc-server-201-hook): Removed.
+	* erc.el (erc-server-202-hook): Removed.
+	* erc.el (erc-server-413-hook): Removed.
+	* erc.el (erc-server-203-hook): Removed.
+	* erc.el (erc-server-414-hook): Removed.
+	* erc.el (erc-server-204-hook): Removed.
+	* erc.el (erc-server-415-hook): Removed.
+	* erc.el (erc-server-205-hook): Removed.
+	* erc.el (erc-server-206-hook): Removed.
+	* erc.el (erc-server-421): Removed.
+	* erc.el (erc-server-208-hook): Removed.
+	* erc.el (erc-server-209-hook): Removed.
+	* erc.el (erc-server-211-hook): Removed.
+	* erc.el (erc-server-212-hook): Removed.
+	* erc.el (erc-server-213-hook): Removed.
+	* erc.el (erc-server-214-hook): Removed.
+	* erc.el (erc-server-215-hook): Removed.
+	* erc.el (erc-server-422-hook): Removed.
+	* erc.el (erc-server-216-hook): Removed.
+	* erc.el (erc-server-423-hook): Removed.
+	* erc.el (erc-server-217-hook): Removed.
+	* erc.el (erc-server-424-hook): Removed.
+	* erc.el (erc-server-218-hook): Removed.
+	* erc.el (erc-server-431-hook): Removed.
+	* erc.el (erc-server-219-hook): Removed.
+	* erc.el (erc-server-432): Removed.
+	* erc.el (erc-server-221): Removed.
+	* erc.el (erc-server-433): Removed.
+	* erc.el (erc-server-241-hook): Removed.
+	* erc.el (erc-server-242-hook): Removed.
+	* erc.el (erc-server-243-hook): Removed.
+	* erc.el (erc-server-436-hook): Removed.
+	* erc.el (erc-server-244-hook): Removed.
+	* erc.el (erc-server-249-hook): Removed.
+	* erc.el (erc-server-437-hook): Removed.
+	* erc.el (erc-server-252): Removed.
+	* erc.el (erc-server-437): Removed.
+	* erc.el (erc-server-441-hook): Removed.
+	* erc.el (erc-server-253): Removed.
+	* erc.el (erc-server-442): Removed.
+	* erc.el (erc-server-254): Removed.
+	* erc.el (erc-server-443-hook): Removed.
+	* erc.el (erc-server-444-hook): Removed.
+	* erc.el (erc-server-445-hook): Removed.
+	* erc.el (erc-server-446-hook): Removed.
+	* erc.el (erc-server-451-hook): Removed.
+	* erc.el (erc-server-261-hook): Removed.
+	* erc.el (erc-server-461): Removed.
+	* erc.el (erc-server-262-hook): Removed.
+	* erc.el (erc-server-301): Removed.
+	* erc.el (erc-server-462-hook): Removed.
+	* erc.el (erc-server-463-hook): Removed.
+	* erc.el (erc-server-464-hook): Removed.
+	* erc.el (erc-server-465-hook): Removed.
+	* erc.el (erc-server-302-hook): Removed.
+	* erc.el (erc-server-467-hook): Removed.
+	* erc.el (erc-server-471-hook): Removed.
+	* erc.el (erc-server-303): Removed.
+	* erc.el (erc-server-472-hook): Removed.
+	* erc.el (erc-server-473-hook): Removed.
+	* erc.el (erc-server-474): Removed.
+	* erc.el (erc-server-305): Removed.
+	* erc.el (erc-server-475): Removed.
+	* erc.el (erc-server-306): Removed.
+	* erc.el (erc-server-477): Removed.
+	* erc.el (erc-process-ctcp-reply): Full sync.
+	* erc.el (erc-server-311-or-314): Removed.
+	* erc.el (erc-server-481): Removed.
+	* erc.el (erc-server-482): Removed.
+	* erc.el (erc-server-312): Removed.
+	* erc.el (erc-server-483-hook): Removed.
+	* erc.el (erc-server-491-hook): Removed.
+	* erc.el (erc-server-501): Removed.
+	* erc.el (erc-server-502-hook): Removed.
+	* erc.el (erc-server-313): Removed.
+	* erc.el (erc-server-317): Removed.
+	* erc.el (erc-server-319): Removed.
+	* erc.el (erc-server-320): Removed.
+	* erc.el (erc-server-321): Removed.
+	* erc.el (erc-server-322): Removed.
+	* erc.el (erc-server-323-hook): Removed.
+	* erc.el (erc-server-324): Removed.
+	* erc.el (erc-server-329): Removed.
+	* erc.el (erc-server-330): Removed.
+	* erc.el (erc-server-331): Removed.
+	* erc.el (erc-server-332): Removed.
+	* erc.el (erc-server-333): Removed.
+	* erc.el (erc-server-341): Removed.
+	* erc.el (erc-server-342-hook): Removed.
+	* erc.el (erc-server-351-hook): Removed.
+	* erc.el (erc-server-352): Removed.
+	* erc.el (erc-server-353): Removed.
+	* erc.el (erc-server-366): Removed.
+	* erc.el (erc-update-channel-info-buffer): Full sync.
+	* erc.el (erc-send-current-line): Ditto.
+	* erc.el (erc-find-file): Ditto.
+	* erc.el (erc-away-p): Ditto.
+	* erc.el (erc-mode-line-format): Ditto.
+	* erc.el (erc-prepare-mode-line-format): Ditto.
+
 2004-05-14  Norbert Koch  <viteno@xemacs.org>
 
 	* Makefile (VERSION): XEmacs package 0.09 released.
 
 2004-05-09  Adrian Aichner  <adrian@xemacs.org>
 
-	* CREDITS: Fulle erc sync with upstream 1.657.
+	* CREDITS: Full erc sync with upstream 1.657.
 	* CREDITS (P.S.):
 	* ChangeLog.upstream:
 	* Makefile (AUTHOR_VERSION):

File ChangeLog.upstream

+2004-06-08  elisteran  <elisteran@D5DC120J>
+
+	* erc-list.el 1.27 (erc-chanlist-frame-parameters): Made customizable.
+	(erc-chanlist-header-face): Changed to use defface with some reasonable defaults instead of make-face, and removed the associated -face variable.
+	(erc-chanlist-odd-line-face): Ditto.
+	(erc-chanlist-even-line-face): Ditto.
+	(erc-chanlist-highlight-face): New variable. Holds a face used for highlighting the current line.
+	(erc-cmd-LIST): Use erc-member-ignore-case instead of member-ignore-case.
+	(erc-chanlist-post-command-hook): Change to move the highlight overlay instead of refontifying the entire buffer.
+	(erc-chanlist-dehighlight-line): Added to detach the highlight overlay from the buffer.
+
+2004-05-31  Jorgen Schaefer  <forcer@users.sourceforge.net>
+
+	* erc.el 1.671: erc-mode-line-format: Add column numbers.
+
+2004-05-31  adriana  <adriana@D5DC120J>
+
+	* erc-autojoin.el 1.10, erc-dcc.el 1.85, erc-log.el 1.17, erc-members.el 1.7, 
+	  erc-sound.el 1.5, erc.el 1.670:
+	* erc-autojoin.el: Typo fix.
+	* erc-dcc.el (erc-dcc-do-GET-command): Use expand-file-name.
+	* erc-dcc.el (erc-dcc-get-file): XEmacs set-buffer-multibyte
+	compatibility.
+	* erc-log.el: Append `erc-log-setup-logging' to
+	`erc-connect-pre-hook' so that `erc-initialize-log-marker' is run
+	first (markers are needed by `erc-log-setup-logging').
+	* erc-log.el (erc-enable-logging): Docstring fix.
+	* erc-log.el (erc-log-setup-logging): Move
+	`erc-log-insert-log-on-open' to (1- (point-max)) when doing
+	`erc-log-insert-log-on-open'.  Modified version of a patch by
+	Lawrence Mitchell.
+	* erc-log.el (erc-log-all-but-server-buffers): Do `save-excursion'
+	as well.
+	* erc-log.el (erc-current-logfile): Pass buffer name as target
+	argument to `erc-generate-log-file-name-function' if
+	`erc-default-target' is nil.
+	* erc-log.el (erc-generate-log-file-name-with-date): Use
+	expand-file-name.
+	* erc-log.el (erc-generate-log-file-name-short): Ditto.
+	* erc-log.el (erc-save-buffer-in-logs): Do `save-excursion' and
+	test whether erc-last-saved-position is a marker.
+	* erc-members.el: Avoid miscompiling macro `erc-log' and
+	`with-erc-channel-buffer' by requiring 'erc at compile time.
+	* erc-sound.el: Use expand-file-name.
+	* erc.el (erc-debug-log-file): Ditto.
+	* erc.el (erc-find-file): Ditto.
+
+2004-05-26  Francis Litterio  <franl@users.sourceforge.net>
+
+	* erc-backend.el 1.6, erc.el 1.669 (erc-cmd-BANLIST):
+	Added a missing "'" that was preventing /BANLIST from working.
+	In erc-backend.el, added server repsonse handler for 367 and 368 reponses to get
+	/BANLIST working.
+
+	* erc.el 1.668:
+	Removed an eval-when-compile that was preventing the byte-compiled version of this
+	file from loading.
+
+	* erc.el 1.667: Undid part of my last change.  I suspect it was wrong.
+
+	* erc.el 1.666: Silenced several byte-compiler warnings.
+
+	* erc.el 1.665 (erc-log-irc-protocol):
+	Fixed problem where this function misformatted IRC protocol text
+	if multiple lines were received from the server at one time.
+
+2004-05-25  Francis Litterio  <franl@users.sourceforge.net>
+
+	* erc.el 1.664 (erc-toggle-debug-irc-protocol):
+	Cosmetic changes to the informational text in the
+	*erc-protocol* buffer.
+
+2004-05-24  Francis Litterio  <franl@users.sourceforge.net>
+
+	* erc.el 1.663:
+	(erc-log-irc-protocol), (erc-process-filter): Now the lines inserted in the *erc-protocol*
+	    buffer are prefixed with the name of the network to/from which the data is going/coming.
+	    This makes reading the *erc-protocol* buffer much easier when connected to multiple
+	    networks.
+
+2004-05-23  Jeremy Bertram Maitin-Shepard  <jbms@gentoo.org>
+
+	* erc-backend.el 1.5:
+	Fixes server message parsing so that command arguments specified after
+	the colon are not treated specially.  All arguments are added to the
+	`command-args' field, and the `contents' points to the last element in
+	the `command-args' list.
+
+	This allows ERC to connect to networks such as Undernet.
+
+	Although keeping `contents' allows many of the response handlers to
+	continue to work as-is, many other are probably broken by this patch.
+
+2004-05-20  Lawrence Mitchell  <wence@gmx.li>
+
+	* HACKING 1.4: Add comment that C-c C-a can be useful if you write
+	ChangeLog entries using Emacs' standard functions.
+
+2004-05-17  Diane Murray  <dsm@muenster.de>
+
+	* erc-speedbar.el 1.15:
+	Ignore errors when attempting to require dframe (there are a couple
+	implementations of speedbar, one of which uses of dframe).
+	(erc-speedbar-version): New.
+	(erc-speedbar-goto-buffer): Use dframe functions if dframe is
+	available.
+
+	* erc-autojoin.el 1.9: Added local variables for this file.
+	(erc-autojoin-add): The channel name is in `erc-response.contents'.
+
+2004-05-17  Mario Lang  <mlang@delysid.org>
+
+	* erc-log.el 1.16:
+	Dont autoload a define-key statement, erc-mode-map might not be known yet
+
+2004-05-16  Lawrence Mitchell  <wence@gmx.li>
+
+	* erc-backend.el 1.4 (erc-parse-server-response): Revert to original
+	`erc-parse-line-from-server' version, since new version breaks
+	for a number of edge cases.
+
+2004-05-15  Diane Murray  <dsm@muenster.de>
+
+	* erc-backend.el 1.3 (erc-handle-unknown-server-response):
+	New function.  Added to
+	`erc-default-server-functions'.  Display unknown responses to the
+	user.
+	(221): Don't show nickname in modes list.
+	(254): Fixed to use 's254.
+	(303): Added docstring.
+	(315, 318, 323, 369): Ignored responses grouped together.
+	(391): New.
+	(406, 432): Use ?n, not ?c in `erc-display-message'.
+	(431, 445, 446, 451, 462, 463, 464, 465, 481, 483, 485, 491, 501,
+	 502): All error responsess with no arguments grouped together.
+
+	* erc.el 1.662 (erc-message-type-member): Use `erc-response.command'.
+	`erc-track-exclude-types' should be respected again.
+	(erc-cmd-TIME): Fixed to work with and without server given as
+	argument.
+	(erc-define-catalog): Added, s391, s431, s445, s446, s451, s462,
+	s463, s464, s465, s483, s484, s485, s491, s501, s502.
+
+2004-05-14  Lawrence Mitchell  <wence@gmx.li>
+
+	* HACKING 1.3: Typo fix.
+
+	* Makefile 1.21 (erc-auto.el): Pass -f flag to rm so that we don't
+	fail if erc-auto.elc doesn't exist.
+
+	* erc-backend.el 1.2 (erc-with-buffer): Autoload.
+	(erc-parse-server-response): XEmacs' `replace-match' only
+	replaces subexpressions when operating on buffers, not strings,
+	work around it.
+	(461): Command with invalid arguments is `second', not `third'.
+
+2004-05-14  Diane Murray  <dsm@muenster.de>
+
+	* erc-notify.el 1.26 (erc-notify-NICK):
+	Use `erc-response.contents' to get nickname.
+
+2004-05-13  Lawrence Mitchell  <wence@gmx.li>
+
+	* erc-track.el 1.64: Indentation fixes.
+	(track-when-inactive): Use `erc-server-FOO-functions', not
+	`erc-server-FOO-hook.
+
+	* erc-notify.el 1.25 (notify): Use `erc-server-FOO-functions', not
+	`erc-server-FOO-hook.
+	(erc-notify-timer, erc-notify-JOIN, erc-notify-NICK)
+	(erc-notify-QUIT): Use new accessors for PARSED argument.
+
+	* erc-nickserv.el 1.19 (services, erc-nickserv-identify-mode): Use
+	`erc-server-FOO-functions', not `erc-server-FOO-hook.
+	(erc-nickserv-identify-autodetect): Use new accessors for PARSED
+	argument.
+
+	* erc-netsplit.el 1.10 (netsplit): Use `erc-server-FOO-functions', not
+	`erc-server-FOO-hook.
+	(erc-netsplit-JOIN, erc-netsplit-MODE, erc-netsplit-QUIT): Use new
+	accessors for PARSED argument.
+
+	* erc-nets.el 1.14:
+	Use `erc-server-FOO-functions', not `erc-server-FOO-hook.
+
+	* erc-menu.el 1.16 (erc-menu-definition): Only allow listing of
+	channels if `erc-cmd-LIST' is fboundp.
+
+	* erc-match.el 1.34:
+	Use `erc-server-FOO-functions', not `erc-server-FOO-hook.
+	(erc-get-parsed-vector-nick, erc-get-parsed-vector-type): Use new
+	accessors for PARSED argument.
+
+	* erc-list.el 1.26 (erc-chanlist, erc-chanlist-322): Use new accessors
+	for PARSED argument.  Use `erc-server-FOO-functions', not
+	`erc-server-FOO-hook.
+
+	* erc-ezbounce.el 1.8 (erc-ezb-notice-autodetect): Use new accessors
+	for PARSED argument.
+	(erc-ezb-initialize): Use `erc-server-FOO-functions', not
+	`erc-server-FOO-hook.
+
+	* erc-dcc.el 1.84:
+	Use `erc-server-FOO-functions', not `erc-server-FOO-hook.
+	(erc-dcc-no-such-nick): Use new accessors for PARSED argument.
+
+	* erc-bbdb.el 1.22 (erc-bbdb-whois, erc-bbdb-JOIN, erc-bbdb-NICK): Use
+	new accessors for PARSED argument.
+	(BBDB): Use `erc-server-FOO-functions', not `erc-server-FOO-hook.
+
+	* erc-autojoin.el 1.8 (autojoin): Use `erc-server-FOO-functions', not
+	`erc-server-FOO-hook.
+	(erc-autojoin-add, erc-autojoin-remove): Use new accessors for
+	PARSED argument.
+
+	* erc-autoaway.el 1.19 (autoaway): Use `erc-server-FOO-functions', not
+	`erc-server-FOO-hook.
+
+	* erc.el 1.661 (erc-backend): Require.
+	(erc-disconnected-hook, erc-join-hook, erc-quit-hook)
+	(erc-part-hook, erc-kick-hook): Docstring fix, we now use
+	`erc-server-FOO-functions', rather than `erc-server-FOO-hook'.
+	(erc-event-to-hook-name, erc-event-to-hook): Remove.
+	(erc-once-with-server-event)
+	(erc-once-with-server-event-global): Use `erc-get-hook'
+	(erc-process-filter): Use `erc-parse-server-response'.
+	(erc-cmd-IDLE, erc-cmd-BANLIST, erc-cmd-MASSUNBAN): New accessors
+	for PARSED argument.  Rename all `erc-server-FOO-hook' to
+	`erc-server-FOO-functions'.
+	(erc-server-364-hook, erc-server-365-hook, erc-server-367-hook)
+	(erc-server-368-hook, erc-server-KILL-hook)
+	(erc-server-PONG-hook, erc-server-200-hook, erc-server-201-hook)
+	(erc-server-202-hook, erc-server-203-hook, erc-server-204-hook)
+	(erc-server-205-hook, erc-server-206-hook, erc-server-208-hook)
+	(erc-server-209-hook, erc-server-211-hook, erc-server-212-hook)
+	(erc-server-213-hook, erc-server-214-hook, erc-server-215-hook)
+	(erc-server-216-hook, erc-server-217-hook, erc-server-218-hook)
+	(erc-server-219-hook, erc-server-241-hook, erc-server-242-hook)
+	(erc-server-243-hook, erc-server-244-hook, erc-server-249-hook)
+	(erc-server-261-hook, erc-server-262-hook, erc-server-302-hook)
+	(erc-server-323-hook, erc-server-342-hook, erc-server-351-hook)
+	(erc-server-381-hook, erc-server-382-hook, erc-server-391-hook)
+	(erc-server-392-hook, erc-server-393-hook, erc-server-394-hook)
+	(erc-server-395-hook, erc-server-402-hook, erc-server-404-hook)
+	(erc-server-407-hook, erc-server-409-hook, erc-server-411-hook)
+	(erc-server-413-hook, erc-server-414-hook, erc-server-415-hook)
+	(erc-server-422-hook, erc-server-423-hook, erc-server-424-hook)
+	(erc-server-431-hook, erc-server-436-hook, erc-server-437-hook)
+	(erc-server-441-hook, erc-server-443-hook, erc-server-444-hook)
+	(erc-server-445-hook, erc-server-446-hook, erc-server-451-hook)
+	(erc-server-462-hook, erc-server-463-hook, erc-server-464-hook)
+	(erc-server-465-hook, erc-server-467-hook, erc-server-471-hook)
+	(erc-server-472-hook, erc-server-473-hook, erc-server-483-hook)
+	(erc-server-491-hook, erc-server-502-hook): Remove.
+	(erc-call-hooks, erc-parse-line-from-server): Remove
+	(erc-server-hook-list): Remove.  Remove top-level call too.
+	(erc-server-ERROR, erc-server-INVITE, erc-server-JOIN)
+	(erc-server-KICK, erc-server-MODE, erc-server-NICK)
+	(erc-server-PART, erc-server-PING, erc-server-PONG)
+	(erc-server-PRIVMSG-or-NOTICE, erc-server-QUIT)
+	(erc-server-TOPIC, erc-server-WALLOPS, erc-server-001)
+	(erc-server-004, erc-server-005, erc-server-221, erc-server-252)
+	(erc-server-253, erc-server-254, erc-server-301, erc-server-303)
+	(erc-server-305, erc-server-306, erc-server-311-or-314)
+	(erc-server-312, erc-server-313, erc-server-317, erc-server-319)
+	(erc-server-320, erc-server-321, erc-server-322, erc-server-324)
+	(erc-server-329, erc-server-330, erc-server-331, erc-server-332)
+	(erc-server-333, erc-server-341, erc-server-352, erc-server-353)
+	(erc-server-366, erc-server-MOTD, erc-server-379)
+	(erc-server-401, erc-server-403, erc-server-405, erc-server-406)
+	(erc-server-412, erc-server-421, erc-server-432, erc-server-433)
+	(erc-server-437, erc-server-442, erc-server-461, erc-server-474)
+	(erc-server-475, erc-server-477, erc-server-481, erc-server-482)
+	(erc-server-501): Move to erc-backend.el
+	(erc-auto-query, erc-banlist-store, erc-banlist-finished)
+	(erc-banlist-update, erc-connection-established)
+	(erc-process-ctcp-query, erc-display-server-message): Use new
+	accessors for PARSED argument.
+
+	* erc-backend.el 1.1: (erc-parse-server-response)
+	(erc-handle-parsed-server-response, erc-get-hook)
+	(define-erc-response-handler): New functions.
+	(erc-response): New struct for server responses.
+	(erc-server-responses): New variable.
+	(erc-call-hooks): Move from erc.el and rework.
+	(ERROR, INVITE, JOIN, KICK, MODE, NICK, PART, PING, PONG)
+	(PRIVMSG, NOTICE, QUIT, TOPIC, WALLOPS, 001, MOTD, 376, 004)
+	(252, 253, 254, 250, 301, 303, 305, 306, 311, 312, 313, 315)
+	(317, 318, 319, 320, 321, 322, 324, 329, 330, 331, 332, 333)
+	(341, 352, 353, 366, 369, 379, 401, 403, 405, 406, 412, 421)
+	(432, 433, 437, 442, 461, 474, 477, 481, 482, 501, 323, 221)
+	(002, 003, 371, 372, 374, 375, 422, 251, 255, 256, 257, 258)
+	(259, 265, 266, 377, 378, 314, 475, 364, 365, 367, 368, 381)
+	(382, 391, 392, 393, 394, 395, 200, 201, 202, 203, 204, 205)
+	(206, 208, 209, 211, 212, 213, 214, 215, 216, 217, 218, 219)
+	(241, 242, 243, 244, 249, 261, 262, 302, 342, 351, 402, 404)
+	(407, 409, 411, 413, 414, 415, 423, 424, 431, 436, 441, 443)
+	(444, 445, 446, 451, 462, 463, 464, 465, 467, 471, 472, 473)
+	(483, 491, 502, 005, KILL): Move from erc.el and rework using
+	`define-erc-response-handler' and erc-response struct.
+
+2004-05-12  Diane Murray  <dsm@muenster.de>
+
+	* erc.el 1.660:
+	A few bug fixes to avoid errors after disconnect, including the
+	"Selecting deleted buffer" bug.
+	(erc-channel-user-op-p, erc-channel-user-voice-p): Make sure NICK is
+	non-nil (`erc-current-nick' can return nil).
+	(erc-server-buffer):  Make sure the buffer isn't a #<killed buffer>.
+	(erc-server-buffer-live-p): New function.
+	(erc-display-line, erc-join-channel, erc-prepare-mode-line-format,
+	 erc-away-p): Use `erc-server-buffer-live-p' to make sure process
+	buffer exists.
+	(erc-send-current-line): If there is no server buffer, let the user
+	know.
+
+	* erc-log.el 1.9.2.2, erc.el 1.600.2.2:
+	C-c C-l keybinding now defined in erc-log.el.
+	(erc-log-version): New.
+	(erc-cmd-JOIN): Fix applied for bug where /join -invite causes errors
+	when there's no `invitation'.
+
+	* erc.el 1.659 (erc-cmd-JOIN):
+	Make sure `chnl' is non-nil before trying to join
+	anything (chnl is not set if /join -invite is used but there's no
+	`invitation').
+
+2004-05-10  Diane Murray  <dsm@muenster.de>
+
+	* erc-log.el 1.15:
+	Define C-c C-l keybinding outside of `erc-log-mode', making it
+	available all the time; autoload definition.
+	(erc-log-version): New.
+
+	* AUTHORS 1.6.2.1, CREDITS 1.6.2.1, Makefile 1.19.2.1, erc-autoaway.el 1.12.2.1, 
+	  erc-autojoin.el 1.6.2.1, erc-button.el 1.47.2.1, erc-chess.el 1.21.2.1, 
+	  erc-dcc.el 1.80.2.1, erc-ezbounce.el 1.4.2.1, erc-fill.el 1.23.2.1, 
+	  erc-ibuffer.el 1.17.2.1, erc-imenu.el 1.5.2.1, erc-lang.el 1.2.2.1, 
+	  erc-list.el 1.18.2.1, erc-log.el 1.9.2.1, erc-macs.el 1.1.2.1, erc-match.el 1.22.2.1, 
+	  erc-members.el 1.5.2.1, erc-menu.el 1.9.2.1, erc-nets.el 1.4.2.1, 
+	  erc-netsplit.el 1.8.2.1, erc-nickserv.el 1.13.2.1, erc-notify.el 1.22.2.1, 
+	  erc-page.el 1.3.2.1, erc-ring.el 1.11.2.1, erc-speak.el 1.25.2.1, 
+	  erc-speedbar.el 1.11.2.1, erc-stamp.el 1.30.2.1, erc-track.el 1.58.2.1, 
+	  erc-truncate.el 1.3.2.1, erc-xdcc.el 1.6.2.1, erc.el 1.600.2.1:
+	Applied all relevant bug fixes and code cleanup made between the time
+	of the ERC_4_0_RELEASE tag until now.
+
+2004-05-09  Diane Murray  <dsm@muenster.de>
+
+	* erc-menu.el 1.15: Updated copyright years.
+
+2004-05-09  Lawrence Mitchell  <wence@gmx.li>
+
+	* erc.el 1.658 (erc-update-channel-info-buffer):
+	Correct bug in sorting of channel
+	users.  Tiny change from Andreas Schwab <schwab@suse.de>.
+
+	* erc-fill.el 1.25 (erc-fill-variable): Fix docstring.
+
+	* erc-button.el 1.52 (erc-button-add-button):
+	Use 'keymap text-property, rather than
+	'local-map, since it's cross-emacs compatible.  Pass
+	:mouse-down-action into `widget-convert-button' as
+	'erc-button-click-button, to make XEmacs happy.  Replace bogus
+	reference to erc-widget-press-button with erc-button-press-button.
+	(erc-button-click-button): New (ignored) first argument, to make
+	XEmacs behave when pressing buttons.
+	(erc-button-press-button): New (ignored) &rest argument.
+
 2004-05-09  adriana  <adriana@D5DC120J>
 
 	* erc-log.el 1.14:

File Makefile.upstream

 
 erc-auto.el: erc-auto.in $(SOURCE)
 	cp erc-auto.in erc-auto.el
-	-rm erc-auto.elc
+	rm -f erc-auto.elc
 	$(EMACS) --no-init-file --no-site-file -batch \
 		-l $(shell pwd | sed -e 's|^/cygdrive/\([a-z]\)|\1:|')/erc-auto \
 		-f generate-autoloads \

File erc-autoaway.el

 Related variables: `erc-public-away-p' and `erc-away-nickname'."
   ;; Enable:
   ((add-hook 'erc-send-completed-hook 'erc-autoaway-reset-idletime)
-   (add-hook 'erc-server-001-hook 'erc-autoaway-reset-idletime)
+   (add-hook 'erc-server-001-functions 'erc-autoaway-reset-idletime)
    (add-hook 'erc-timer-hook 'erc-autoaway-possibly-set-away)
    (when erc-autoaway-use-emacs-idle
      (erc-autoaway-reestablish-idletimer)))
   ;; Disable:
   ((remove-hook 'erc-send-completed-hook 'erc-autoaway-reset-idletime)
-   (remove-hook 'erc-server-001-hook 'erc-autoaway-reset-idletime)
+   (remove-hook 'erc-server-001-functions 'erc-autoaway-reset-idletime)
    (remove-hook 'erc-timer-hook 'erc-autoaway-possibly-set-away)
    (when erc-autoaway-idletimer
      (cancel-timer erc-autoaway-idletimer)

File erc-autojoin.el

 ;; we /JOIN and /PART channels, this alist is updated to reflect our
 ;; current setup, so that when we reconnect, we rejoin the same
 ;; channels.  The alist can be customized, so that the customized
-;; value will be used when we reconnect in out next Emacs session.
+;; value will be used when we reconnect in our next Emacs session.
 
 ;;; Code:
 
 (define-erc-module autojoin nil
   "Makes ERC autojoin on connects and reconnects."
   ((add-hook 'erc-after-connect 'erc-autojoin-channels)
-   (add-hook 'erc-server-JOIN-hook 'erc-autojoin-add)
-   (add-hook 'erc-server-PART-hook 'erc-autojoin-remove))
+   (add-hook 'erc-server-JOIN-functions 'erc-autojoin-add)
+   (add-hook 'erc-server-PART-functions 'erc-autojoin-remove))
   ((remove-hook 'erc-after-connect 'erc-autojoin-channels)
-   (remove-hook 'erc-server-JOIN-hook 'erc-autojoin-add)
-   (remove-hook 'erc-server-PART-hook 'erc-autojoin-remove)))
+   (remove-hook 'erc-server-JOIN-functions 'erc-autojoin-add)
+   (remove-hook 'erc-server-PART-functions 'erc-autojoin-remove)))
 
 (defcustom erc-autojoin-channels-alist nil
   "Alist of channels to autojoin on IRC networks.
 
 (defun erc-autojoin-add (proc parsed)
   "Add the channel being joined to `erc-autojoin-channels-alist'."
-  (let* ((chnl (aref parsed 2))
-	 (nick (car (erc-parse-user (aref parsed 1))))
+  (let* ((chnl (erc-response.contents parsed))
+	 (nick (car (erc-parse-user (erc-response.sender parsed))))
 	 (server (with-current-buffer (process-buffer proc)
 		   erc-announced-server-name)))
     (when (erc-current-nick-p nick)
 
 (defun erc-autojoin-remove (proc parsed)
   "Remove the channel being left from `erc-autojoin-channels-alist'."
-  (let* ((chnl (aref parsed 2))
-	 (nick (car (erc-parse-user (aref parsed 1))))
+  (let* ((chnl (car (erc-response.command-args parsed)))
+	 (nick (car (erc-parse-user (erc-response.sender parsed))))
 	 (server (with-current-buffer (process-buffer proc)
 		   erc-announced-server-name)))
     (when (erc-current-nick-p nick)
 (provide 'erc-autojoin)
 
 ;;; erc-autojoin.el ends here
+;;
+;; Local Variables:
+;; indent-tabs-mode: t
+;; tab-width: 8
+;; standard-indent: 4
+;; End:
 
 (defun erc-bbdb-whois (proc parsed)
   (let (; We could use server name too, probably
-	(nick (aref parsed 3))
-	(name (aref parsed 7))
-	(finger-host (concat (aref parsed 4) "@" (aref parsed 5))))
+	(nick (second (erc-response.command-args parsed)))
+	(name (erc-response.contents parsed))
+	(finger-host (concat (third (erc-response.command-args parsed))
+                             "@"
+                             (fourth (erc-response.command-args parsed)))))
     (erc-bbdb-insinuate-and-show-entry erc-bbdb-auto-create-on-whois-p proc
 				       nick name finger-host t)))
 
 (defun erc-bbdb-JOIN (proc parsed)
-  (let* ((sender (erc-parse-user (aref parsed 1)))
+  (let* ((sender (erc-parse-user (erc-response.sender parsed)))
 	 (nick (nth 0 sender)))
     (unless (string= nick (erc-current-nick))
-      (let* ((channel (aref parsed 2))
+      (let* ((channel (erc-response.contents parsed))
 	     (finger-host (concat (nth 1 sender) "@" (nth 2 sender))))
 	  (erc-bbdb-insinuate-and-show-entry
 	   erc-bbdb-auto-create-on-join-p proc
 
 (defun erc-bbdb-NICK (proc parsed)
   "Annotate new nick name to a record in case it already exists."
-  (let* ((sender (erc-parse-user (aref parsed 1)))
+  (let* ((sender (erc-parse-user (erc-response.sender parsed)))
 	 (nick (nth 0 sender)))
     (unless (string= nick (erc-current-nick))
       (let* ((finger-host (concat (nth 1 sender) "@" (nth 2 sender))))
 	(erc-bbdb-insinuate-and-show-entry
 	 erc-bbdb-auto-create-on-nick-p proc
-	 nick nil finger-host nil (aref parsed 2))))))
+	 nick nil finger-host nil (erc-response.contents parsed))))))
 
 (defun erc-bbdb-init-highlighting-hook-fun (proc parsed)
   (erc-bbdb-init-highlighting))
 ;;;###autoload (autoload 'erc-bbdb-mode "erc-bbdb")
 (define-erc-module BBDB nil
   "In ERC BBDB mode, you can directly interact with your BBDB."
-  ((add-hook 'erc-server-311-hook 'erc-bbdb-whois t)
-   (add-hook 'erc-server-JOIN-hook 'erc-bbdb-JOIN t)
-   (add-hook 'erc-server-NICK-hook 'erc-bbdb-NICK t)
-   (add-hook 'erc-server-376-hook 'erc-bbdb-init-highlighting-hook-fun t))
-  ((remove-hook 'erc-server-311-hook 'erc-bbdb-whois)
-   (remove-hook 'erc-server-JOIN-hook 'erc-bbdb-JOIN)
-   (remove-hook 'erc-server-NICK-hook 'erc-bbdb-NICK)
-   (remove-hook 'erc-server-376-hook 'erc-bbdb-init-highlighting-hook-fun)))
+  ((add-hook 'erc-server-311-functions 'erc-bbdb-whois t)
+   (add-hook 'erc-server-JOIN-functions 'erc-bbdb-JOIN t)
+   (add-hook 'erc-server-NICK-functions 'erc-bbdb-NICK t)
+   (add-hook 'erc-server-376-functions 'erc-bbdb-init-highlighting-hook-fun t))
+  ((remove-hook 'erc-server-311-functions 'erc-bbdb-whois)
+   (remove-hook 'erc-server-JOIN-functions 'erc-bbdb-JOIN)
+   (remove-hook 'erc-server-NICK-functions 'erc-bbdb-NICK)
+   (remove-hook 'erc-server-376-functions 'erc-bbdb-init-highlighting-hook-fun)))
 
 (provide 'erc-bbdb)
 
 			      (file-name-nondirectory filename))
 		      (or erc-dcc-get-default-directory
 			  default-directory)
-		      (concat (or erc-dcc-get-default-directory
-				  default-directory)
-			      (file-name-nondirectory filename)))))
+		      (expand-file-name (file-name-nondirectory filename)
+					(or erc-dcc-get-default-directory
+					    default-directory)))))
           (cond ((file-exists-p file)
                  (if (yes-or-no-p (format "File %s exists.  Overwrite? "
 					  file))
 
 (defun erc-dcc-no-such-nick (proc parsed)
   "Detect and handle no-such-nick replies from the IRC server."
-  (let* ((elt (erc-dcc-member :nick (aref parsed 3) :parent proc))
+  (let* ((elt (erc-dcc-member :nick (second (erc-response.command-args parsed))
+                              :parent proc))
 	 (peer (plist-get elt :peer)))
     (when (or (and (processp peer) (not (eq (process-status peer) 'open)))
 	      elt)
       (if (processp peer) (delete-process peer)))
     nil))
 
-(add-hook 'erc-server-401-hook 'erc-dcc-no-such-nick)
+(add-hook 'erc-server-401-functions 'erc-dcc-no-such-nick)
 
 (provide 'erc-dcc)
 

File erc-ezbounce.el

 ;;;###autoload
 (defun erc-ezb-notice-autodetect (proc parsed)
   "React on an EZBounce NOTICE request."
-  (let* ((sender (aref parsed 1))
-	 (message (aref parsed 3))
+  (let* ((sender (erc-response.sender parsed))
+	 (message (erc-response.contents parsed))
 	 (function (erc-ezb-lookup-action message)))
     (when (and (string-match erc-ezb-regexp sender)
 	       function)
 ;;;###autoload
 (defun erc-ezb-initialize ()
   "Add EZBouncer convenience functions to ERC."
-  (add-hook 'erc-server-NOTICE-hook 'erc-ezb-notice-autodetect))
+  (add-hook 'erc-server-NOTICE-functions 'erc-ezb-notice-autodetect))
 	
 (provide 'erc-ezbounce)
 
         (erc-restore-text-properties))))
 
 (defun erc-fill-variable ()
-  "Fill region from START to END. START and END should be markers."
+  "Fill from `point-min' to `point-max'."
   (let ((fill-prefix erc-fill-prefix)
         (fill-column (or erc-fill-column fill-column)))
     (goto-char (point-min))
 
 (require 'erc)
 (require 'erc-nets)
+(unless (fboundp 'make-overlay)
+  (require 'overlay))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; User customizable variables.
   :group 'erc
   :type '(repeat string))
 
-(defvar erc-chanlist-frame-parameters nil
-  "If nil, the channel list is displayed in a new window, otherwise this
-variable holds the frame parameters used to make a frame to display the channel
-list.")
+(defcustom erc-chanlist-frame-parameters nil
+  "*If nil, the channel list is displayed in a new window; if non-nil,
+this variable holds the frame parameters used to make a frame to
+display the channel list."
+  :group 'erc
+  :type 'list)
 
 (defcustom erc-chanlist-hide-modeline nil
   "*If nil, the channel list buffer has a modeline, otherwise the modeline is hidden."
   :group 'erc
   :type 'boolean)
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Faces.  There's really no good default value that we can set for the
-;; foreground color of these faces, since we don't know the user's color scheme.
-;; The user should modify these faces as desired.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defface erc-chanlist-header-face '((t (:bold t)))
+  "Face used for the headers in erc's channel list"
+  :group 'erc-faces)
 
-(make-face 'erc-chanlist-header-face)
-(defvar erc-chanlist-header-face 'erc-chanlist-header-face)
-(set-face-foreground 'erc-chanlist-header-face nil)
-(set-face-background 'erc-chanlist-header-face nil)
+(defface erc-chanlist-odd-line-face '((t (:inverse-video t)))
+  "Face used for the odd lines in erc's channel list"
+  :group 'erc-faces)
 
-(make-face 'erc-chanlist-odd-line-face)
-(defvar erc-chanlist-odd-line-face 'erc-chanlist-odd-line-face)
-(set-face-foreground 'erc-chanlist-odd-line-face nil)
-(set-face-background 'erc-chanlist-odd-line-face nil)
+(defface erc-chanlist-even-line-face '((t (:inverse-video nil)))
+  "Face used for the even line sin erc's channel list"
+  :group 'erc-faces)
 
-(make-face 'erc-chanlist-even-line-face)
-(defvar erc-chanlist-even-line-face 'erc-chanlist-even-line-face)
-(set-face-foreground 'erc-chanlist-even-line-face nil)
-(set-face-background 'erc-chanlist-even-line-face nil)
+;; This should perhaps be a defface that inherits values from the highlight face
+;; but xemacs does not support inheritance
+(defcustom erc-chanlist-highlight-face 'highlight
+  "Face used for highlighting the current line in a list."
+  :type 'face
+  :group 'erc-faces)
 
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   "The sort mode of the channel list buffer.  Either 'channel or 'users.")
 (make-variable-buffer-local 'erc-chanlist-sort-state)
 
+(defvar erc-chanlist-highlight-overlay nil
+  "The overlay used for erc chanlist highlighting")
+(make-variable-buffer-local 'erc-chanlist-highlight-overlay)
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Define erc-chanlist-mode.
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 available channel)."
   (interactive)
   (if (and (null channel)
-	   (member-ignore-case (erc-network-name) erc-no-list-networks))
+	   (erc-member-ignore-case (erc-network-name) erc-no-list-networks))
       (erc-display-line "ERC is configured not to allow the /LIST command on this network!"
 			(current-buffer))
     (erc-display-line (erc-make-notice (concat "Listing channel"
     (erc-once-with-server-event
      321
      '(progn
-	(add-hook 'erc-server-322-hook 'erc-chanlist-322 nil t)
+	(add-hook 'erc-server-322-functions 'erc-chanlist-322 nil t)
 
 	(erc-once-with-server-event
 	 323
 	 '(progn
-	    (remove-hook 'erc-server-322-hook 'erc-chanlist-322 t)
+	    (remove-hook 'erc-server-322-functions 'erc-chanlist-322 t)
 	    (let ((buf erc-chanlist-buffer))
 	      (if (not (buffer-live-p buf))
 		  (error "`erc-chanlist-buffer' does not refer to a live buffer"))
 	    (message "")
 	    t))
 
-	(setq erc-chanlist-buffer (get-buffer-create (format "*Channels on %s*" (aref parsed 1))))
+	(setq erc-chanlist-buffer (get-buffer-create (format "*Channels on %s*" (erc-response.sender parsed))))
 	(with-current-buffer erc-chanlist-buffer
 	  (setq buffer-read-only nil)
 	  (erase-buffer)
 (defun erc-chanlist-322 (proc parsed)
   "Processes an IRC 322 message, which carries information about one channel for
 the LIST command."
-  (let ((chnl (aref parsed 3))
-	(nv (aref parsed 4))
-	(topic (aref parsed 5)))
-    (with-current-buffer erc-chanlist-buffer
-      (save-excursion
-	(goto-char (point-max))
-	(let (buffer-read-only)
-	  (insert (format "%-26s%4s %s\n" (erc-interpret-controls chnl) nv
-			  (erc-interpret-controls topic))))
+  (multiple-value-bind (channel num-users)
+      (cdr (erc-response.command-args parsed))
+    (let ((topic (erc-response.contents parsed)))
+      (with-current-buffer erc-chanlist-buffer
+        (save-excursion
+          (goto-char (point-max))
+          (let (buffer-read-only)
+            (insert (format "%-26s%4s %s\n" (erc-interpret-controls channel)
+                            num-users
+                            (erc-interpret-controls topic))))
+          
+          ;; Maybe display a progress indicator in the minibuffer.
+          (when (and erc-chanlist-progress-message
+                     (> (erc-time-diff
+                         erc-chanlist-last-time (erc-current-time))
+                        3))
+            (setq erc-chanlist-last-time (erc-current-time))
+            (message "Accumulating channel list ... %c"
+                     (aref [?/ ?| ?\\ ?- ?! ?O ?o] (random 7))))
 
-	;; Maybe display a progress indicator in the minibuffer.
-	(when (and erc-chanlist-progress-message
-		   (> (erc-time-diff
-		       erc-chanlist-last-time (erc-current-time))
-		      3))
-	  (setq erc-chanlist-last-time (erc-current-time))
-	  (message "Accumulating channel list ... %c"
-		   (aref [?/ ?| ?\\ ?- ?! ?O ?o] (random 7))))
-
-	;; Return success to prevent other hook functions from being run.
-	t))))
+          ;; Return success to prevent other hook functions from being run.
+          t)))))
 
 (defun erc-chanlist-post-command-hook ()
   "Keeps the current line highlighted."
   (ignore-errors
-    ;; First, restore all channel lines to their normal faces.
-    (erc-prettify-channel-list)
-
-    ;; Then, highlight the current line.
-    ;;(sleep-for 2)
     (save-excursion
       (beginning-of-line)
-      (when (looking-at erc-chanlist-channel-line-regexp)
-	(erc-chanlist-highlight-line)))))
+      (if (looking-at erc-chanlist-channel-line-regexp)
+	  (erc-chanlist-highlight-line)
+	(erc-chanlist-dehighlight-line)))))
+
+(defun erc-chanlist-dehighlight-line ()
+  "Make the currently highlighted line unhighlighted."
+  (delete-overlay erc-chanlist-highlight-overlay))
 
 (defun erc-chanlist-highlight-line ()
   "Highlights the current line."
+  (unless erc-chanlist-highlight-overlay
+    (setq erc-chanlist-highlight-overlay 
+	  (make-overlay (point-min) (point-min)))
+    ; Detach it from the buffer. 
+    (delete-overlay erc-chanlist-highlight-overlay)
+    (overlay-put erc-chanlist-highlight-overlay 'face erc-chanlist-highlight-face)
+    ;; Expressly put it at a higher priority than the text
+    ;; properties used for faces later on. Gnu emacs promises that
+    ;; right now overlays are higher priority than text properties,
+    ;; but why take chances?
+    (overlay-put erc-chanlist-highlight-overlay 'priority 1))
+
   (save-excursion
     (let ((bol (point))
 	  (inhibit-read-only t))
       (end-of-line)
-      (add-text-properties bol (point) `(face highlight)))))
+      (move-overlay erc-chanlist-highlight-overlay bol (point)))))
+
+(defun erc-chanlist-dehighlight-line ()
+  "Removes the line highlighting."
+  (delete-overlay erc-chanlist-highlight-overlay))
 
 (defun erc-prettify-channel-list ()
   "Makes the channel list buffer look pretty.  When this function runs, the
 
 (require 'erc)
 
+(defconst erc-log-version "$Revision$"
+  "ERC log mode revision")
+
 (defgroup erc-log nil
   "Logging facilities for ERC."
   :group 'erc)
 
 (defcustom erc-enable-logging t
   "If non-nil, ERC will log IRC conversations.
-This can either be a boolean value nil or t.  Or a function.
+This can either be a boolean value of nil or t, or a function.
 If the value is a function, it will be called with one argument, the
 name of the current ERC buffer.  One possible function, which saves
 all but server buffers is `erc-log-all-but-server-buffers'.
 
-This variable is buffer local setting it via \\[customize] sets the
+This variable is buffer local.  Setting it via \\[customize] sets the
 default value.
 
 Log files are stored in `erc-log-channels-directory'."
   ((add-hook 'erc-insert-post-hook
 	     'erc-save-buffer-in-logs)
    (add-hook 'erc-send-post-hook
-	     'erc-save-buffer-in-logs)
-   (define-key erc-mode-map "\C-c\C-l" 'erc-save-buffer-in-logs))
+	     'erc-save-buffer-in-logs))
   ;; disable
   ((remove-hook 'erc-insert-post-hook
 		'erc-save-buffer-in-logs)
    (remove-hook 'erc-send-post-hook
-		'erc-save-buffer-in-logs)
-    (define-key erc-mode-map "\C-c\C-l" 'undefined)))
+		'erc-save-buffer-in-logs)))
 
 (when erc-enable-logging
   (add-hook 'erc-kill-buffer-hook
   (add-hook 'erc-part-hook
             'erc-conditional-save-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 ()
   "Setup the buffer-local logging variables in the current buffer.
       (setq write-file-hooks              ;Emacs 18
 	    '(erc-save-buffer-in-logs)))
     (when erc-log-insert-log-on-open
-      (ignore-errors (insert-file-contents (erc-current-logfile))))))
+      (ignore-errors (insert-file-contents (erc-current-logfile))
+                    (move-marker erc-last-saved-position
+                                 (1- (point-max)))))))
 
-(add-hook 'erc-connect-pre-hook 'erc-log-setup-logging)
+;;; Append, so that 'erc-initialize-log-marker keeps running first.
+(add-hook 'erc-connect-pre-hook 'erc-log-setup-logging 'append)
 
 (defun erc-log-all-but-server-buffers (buffer)
   "Returns t if logging should be enabled in BUFFER.
 Returns nil iff `erc-server-buffer-p' returns t."
-  (save-window-excursion
-    (set-buffer buffer)
-    (not (erc-server-buffer-p))))
+  (save-excursion
+    (save-window-excursion
+      (set-buffer buffer)
+      (not (erc-server-buffer-p)))))
 
 (defun erc-save-query-buffers (process)
   "Save all buffers process."
 				  (erc-save-buffer-in-logs)))
 
 (defun erc-conditional-save-buffer (buffer)
-  "Save Query BUFFER if save-queries-on-quit is t."
+  "Save Query BUFFER if `erc-save-queries-on-quit' is t."
   (when erc-save-buffer-on-part
     (erc-save-buffer-in-logs buffer)))
 
 (defun erc-conditional-save-queries (process)
-  "Save Query buffers of PROCESS if save-queries-on-quit is t."
+  "Save Query buffers of PROCESS if `erc-save-queries-on-quit' is t."
   (when erc-save-queries-on-quit
     (erc-save-query-buffers process)))
 
   (downcase (expand-file-name
 	     (funcall erc-generate-log-file-name-function
 		      (or buffer (current-buffer))
-                      (erc-default-target) (erc-current-nick)
+                      (or (erc-default-target) (buffer-name buffer))
+		      (erc-current-nick)
 		      erc-session-server erc-session-port))))
 
 (defun erc-generate-log-file-name-with-date (buffer &rest ignore)
   "This function computes a short log file name.
 The name of the log file is composed of BUFFER and the current date.
 This function is a possible value for `erc-generate-log-file-name-function'."
-  (concat erc-log-channels-directory
-	  "/" (buffer-name buffer)
-	  "-" (format-time-string "%Y-%m-%d")
-	  ".txt"))
+  (expand-file-name
+   (concat (buffer-name buffer) "-" (format-time-string "%Y-%m-%d") ".txt")
+   erc-log-channels-directory))
 
 (defun erc-generate-log-file-name-short (buffer &rest ignore)
   "This function computes a short log file name.
 you can affect that using `rename-buffer' and the-like.  This
 function is a possible value for
 `erc-generate-log-file-name-function'."
-  (concat erc-log-channels-directory "/" (buffer-name buffer) ".txt"))
+  (expand-file-name (concat (buffer-name buffer) ".txt")
+		    erc-log-channels-directory))
 
 (defun erc-generate-log-file-name-long (buffer target nick server port)
   "Generates a log-file name in the way ERC always did it.
   (when (erc-logging-enabled buffer)
     (let ((file (erc-current-logfile buffer))
           (coding-system-for-write erc-log-file-coding-system))
-      (with-current-buffer buffer
-	(save-restriction
-	  (widen)
-          ;; early on in the initalisation, don't try and write the log out
-          (when (> erc-insert-marker (1+ erc-last-saved-position))
-            (write-region (1+ (marker-position erc-last-saved-position))
-                          (marker-position erc-insert-marker)
-			    file t 'nomessage)
-            (if (and erc-truncate-buffer-on-save (interactive-p))
-                (progn
-                  (let ((inhibit-read-only t)) (erase-buffer))
-                  (move-marker erc-last-saved-position (point-max))
-                  (erc-display-prompt))
-		(move-marker erc-last-saved-position
+      (save-excursion
+        (with-current-buffer buffer
+          (save-restriction
+            (widen)
+            ;; early on in the initalisation, don't try and write the log out
+            (when (and (markerp erc-last-saved-position)
+                       (> erc-insert-marker (1+ erc-last-saved-position)))
+              (write-region (1+ (marker-position erc-last-saved-position))
+                            (marker-position erc-insert-marker)
+                            file t 'nomessage)
+              (if (and erc-truncate-buffer-on-save (interactive-p))
+                  (progn
+                    (let ((inhibit-read-only t)) (erase-buffer))
+                    (move-marker erc-last-saved-position (point-max))
+                    (erc-display-prompt))
+                (move-marker erc-last-saved-position
                              ;; If we place erc-last-saved-position
                              ;; at erc-insert-marker, because text
                              ;; gets inserted /before/
                              ;; will always be equal to
                              ;; erc-insert-marker).
                              (1- (marker-position erc-insert-marker)))))
-          (set-buffer-modified-p nil)))))
+            (set-buffer-modified-p nil))))))
   t)
 
 (provide 'erc-log)

File erc-match.el

 
 (defun erc-get-parsed-vector-nick (vect)
   "Return nickname in the parsed vector VECT."
-  (let* ((untreated-nick (when (vectorp vect)
-			   (aref vect 1)))
+  (let* ((untreated-nick (and vect (erc-response.sender vect)))
 	 (maybe-nick (when untreated-nick
 		       (car (split-string untreated-nick "!")))))
     (when (and (not (null maybe-nick))
 (defun erc-get-parsed-vector-type (vect)
   "Return message type in the parsed vector VECT."
   (and vect
-       (aref vect 0)))
+       (erc-response.command vect)))
 
 (defun erc-match-message ()
   "Mark certain keywords in a region.
   nil)
 
 ; This handler must be run _before_ erc-process-away is.
-(add-hook 'erc-server-305-hook 'erc-log-matches-come-back nil)
+(add-hook 'erc-server-305-functions 'erc-log-matches-come-back nil)
 
 (defun erc-go-to-log-matches-buffer ()
   "Interactively open an erc-log-matches buffer."
 ;; erc-menu.el -- Menu-bar definitions for the Emacs IRC Client
 
-;; Copyright (C) 2002  Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004  Free Software Foundation, Inc.
 
 ;; Author: Mario Lang <mlang@delysid.org>
 ;; Keywords: comm, processes, menu
 	["Connect to server..." erc-select t]
 	["Disconnect from server..." erc-quit-server erc-connected]
 	"-"
-	["List channels..." erc-cmd-LIST erc-connected]
+	["List channels..." erc-cmd-LIST
+	 (and erc-connected (fboundp 'erc-cmd-LIST))]
 	["Join channel..." erc-join-channel erc-connected]
 	["Start a query..." erc-cmd-QUERY erc-connected]
 	"-"
   (setq erc-network nil)
   nil)
 
-(add-hook 'erc-server-375-hook 'erc-set-network-name)
-(add-hook 'erc-server-422-hook 'erc-set-network-name)
+(add-hook 'erc-server-375-functions 'erc-set-network-name)
+(add-hook 'erc-server-422-functions 'erc-set-network-name)
 (add-hook 'erc-disconnected-hook 'erc-unset-network-name)
 
 (defun erc-ports-list (ports)

File erc-netsplit.el

 (define-erc-module netsplit nil
   "This mode hides quit/join messages if a netsplit occurs."
   ((erc-netsplit-install-message-catalogs)
-   (add-hook 'erc-server-JOIN-hook 'erc-netsplit-JOIN)
-   (add-hook 'erc-server-MODE-hook 'erc-netsplit-MODE)
-   (add-hook 'erc-server-QUIT-hook 'erc-netsplit-QUIT)
+   (add-hook 'erc-server-JOIN-functions 'erc-netsplit-JOIN)
+   (add-hook 'erc-server-MODE-functions 'erc-netsplit-MODE)
+   (add-hook 'erc-server-QUIT-functions 'erc-netsplit-QUIT)
    (add-hook 'erc-timer-hook 'erc-netsplit-timer))
-  ((remove-hook 'erc-server-JOIN-hook 'erc-netsplit-JOIN)
-   (remove-hook 'erc-server-MODE-hook 'erc-netsplit-MODE)
-   (remove-hook 'erc-server-QUIT-hook 'erc-netsplit-QUIT)
+  ((remove-hook 'erc-server-JOIN-functions 'erc-netsplit-JOIN)
+   (remove-hook 'erc-server-MODE-functions 'erc-netsplit-MODE)
+   (remove-hook 'erc-server-QUIT-functions 'erc-netsplit-QUIT)
    (remove-hook 'erc-timer-hook 'erc-netsplit-timer)))
 
 (defcustom erc-netsplit-show-server-mode-changes-flag nil
 
 (defun erc-netsplit-JOIN (proc parsed)
   "Show/don't show rejoins."
-  (let ((nick (aref parsed 1))
+  (let ((nick (erc-response.sender parsed))
 	(no-next-hook nil))
     (dolist (elt erc-netsplit-list)
       (if (member nick (nthcdr 3 elt))
 (defun erc-netsplit-MODE (proc parsed)
   "Hide mode changes from servers."
   ;; regexp matches things with a . in them, and no ! or @ in them.
-  (when (string-match "^[^@!]+\\.[^@!]+$" (aref parsed 1))
+  (when (string-match "^[^@!]+\\.[^@!]+$" (erc-response.sender parsed))
     (and erc-netsplit-debug
 	 (erc-display-message 
 	  parsed 'notice (process-buffer proc)
 
 (defun erc-netsplit-QUIT (proc parsed)
   "Detect netsplits."
-  (let ((split (aref parsed 2))
-	(nick (aref parsed 1))
+  (let ((split (erc-response.contents parsed))
+	(nick (erc-response.sender parsed))
 	ass)
     (when (string-match erc-netsplit-regexp split)
       (setq ass (assoc split erc-netsplit-list))

File erc-nickserv.el

 
 ;;; Commentary:
 
-;; Listens for notices from NickServ, and if it detects an identify
-;; request, it will either prompt for the password in the minibuffer
-;; or identify automatically depending upon how the variables
-;; `erc-prompt-for-nickserv-password' and `erc-nickserv-passwords' are
-;; set.
+;; There are two ways to go about identifying yourself automatically to
+;; NickServ with this module.  The more secure way is to listen for identify
+;; requests from the user NickServ.  Another way is to identify yourself to
+;; NickServ directly after a successful connection and every time you change
+;; your nickname.  This method is rather insecure, though, because no checks
+;; are made to test if NickServ is the real NickServ for a given network or
+;; server.
 
-;; At this time ERC only recognizes the official nickname services on the
-;; networks Dalnet, GalaxyNet, Freenode, Slashnet and BrasNET.
+;; As a default, ERC has the data for the official nickname services on the
+;; networks Austnet, BrasNET, Dalnet, freenode, GalaxyNet, and Slashnet.
+;; You can add more by using M-x customize-variable RET erc-nickserv-alist.
 
 ;; Usage:
 ;;
 (define-erc-module services nickserv
   "This mode automates communication with services."
   ((erc-nickserv-identify-mode erc-nickserv-identify-mode))
-  ((remove-hook 'erc-server-NOTICE-hook
+  ((remove-hook 'erc-server-NOTICE-functions
 		'erc-nickserv-identify-autodetect)
    (remove-hook 'erc-after-connect
 		'erc-nickserv-identify-on-connect)
 		  '(("autodetect") ("nick-change") nil t)))))
   (cond ((eq mode 'autodetect)
 	 (setq erc-nickserv-identify-mode 'autodetect)
-	 (add-hook 'erc-server-NOTICE-hook
+	 (add-hook 'erc-server-NOTICE-functions
 		   'erc-nickserv-identify-autodetect)
 	 (remove-hook 'erc-nick-changed-functions
 		      'erc-nickserv-identify-on-nick-change)
 		   'erc-nickserv-identify-on-connect)
 	 (add-hook 'erc-nick-changed-functions
 		   'erc-nickserv-identify-on-nick-change)
-	 (remove-hook 'erc-server-NOTICE-hook
+	 (remove-hook 'erc-server-NOTICE-functions
 		      'erc-nickserv-identify-autodetect))
 	(t
 	 (setq erc-nickserv-identify-mode nil)
-	 (remove-hook 'erc-server-NOTICE-hook
+	 (remove-hook 'erc-server-NOTICE-functions
 		      'erc-nickserv-identify-autodetect)
 	 (remove-hook 'erc-after-connect
 		      'erc-nickserv-identify-on-connect)
     (let* ((network (erc-network))
            (nickserv (nth 1 (assoc network erc-nickserv-alist)))
            (identify-regex (nth 2 (assoc network erc-nickserv-alist)))
-           (sspec (aref parsed 1))
-           (nick (aref parsed 2))
-           (msg (aref parsed 3)))
+           (sspec (erc-response.sender parsed))
+           (nick (car (erc-response.command-args parsed)))
+           (msg (erc-response.contents parsed)))
       ;; continue only if we're sure it's the real nickserv for this network
       ;; and it's asked us to identify
       (when (and nickserv (equal sspec nickserv)

File erc-notify.el

   "Periodically check for the online status of certain users and report
 changes."
   ((add-hook 'erc-timer-hook 'erc-notify-timer)
-   (add-hook 'erc-server-JOIN-hook 'erc-notify-JOIN)
-   (add-hook 'erc-server-NICK-hook 'erc-notify-NICK)
-   (add-hook 'erc-server-QUIT-hook 'erc-notify-QUIT))
+   (add-hook 'erc-server-JOIN-functions 'erc-notify-JOIN)
+   (add-hook 'erc-server-NICK-functions 'erc-notify-NICK)
+   (add-hook 'erc-server-QUIT-functions 'erc-notify-QUIT))
   ((remove-hook 'erc-timer-hook 'erc-notify-timer)
-   (remove-hook 'erc-server-JOIN-hook 'erc-notify-JOIN)
-   (remove-hook 'erc-server-NICK-hook 'erc-notify-NICK)
-   (remove-hook 'erc-server-QUIT-hook 'erc-notify-QUIT)))
+   (remove-hook 'erc-server-JOIN-functions 'erc-notify-JOIN)
+   (remove-hook 'erc-server-NICK-functions 'erc-notify-NICK)
+   (remove-hook 'erc-server-QUIT-functions 'erc-notify-QUIT)))
 
 ;;;; Timer handler
 
 		erc-notify-interval))
     (erc-once-with-server-event
      303
-     '(let* ((server (aref parsed 1))
-	     (ison-list (delete "" (split-string (aref parsed 3))))
+     '(let* ((server (erc-response.sender parsed))
+	     (ison-list (delete "" (split-string (erc-response.contents parsed))))
 	     (new-list ison-list)
 	     (old-list (with-current-buffer (erc-server-buffer)
 			 erc-last-ison)))
   "Check if channel joiner is on `erc-notify-list' and not on `erc-last-ison'.
 If this condition is satisfied, produce a notify_on message and add the nick
 to `erc-last-ison' to prevent any further notifications."
-  (let ((nick (erc-extract-nick (aref parsed 1))))
+  (let ((nick (erc-extract-nick (erc-response.sender parsed))))
     (when (and (erc-member-ignore-case nick erc-notify-list)
 	       (not (erc-member-ignore-case nick erc-last-ison)))
       (add-to-list 'erc-last-ison nick)
   "Check if new nick is on `erc-notify-list' and not on `erc-last-ison'.
 If this condition is satisfied, produce a notify_on message and add the nick
 to `erc-last-ison' to prevent any further notifications."
-  (let ((nick (aref parsed 2)))
+  (let ((nick (erc-response.contents parsed)))
     (when (and (erc-member-ignore-case nick erc-notify-list)
 	       (not (erc-member-ignore-case nick erc-last-ison)))
       (add-to-list 'erc-last-ison nick)
   "Check if quitter is on `erc-notify-list' and on `erc-last-ison'.
 If this condition is satisfied, produce a notify_off message and remove the
 nick from `erc-last-ison' to prevent any further notifications."
-  (let ((nick (erc-extract-nick (aref parsed 1))))
+  (let ((nick (erc-extract-nick (erc-response.sender parsed))))
     (when (and (erc-member-ignore-case nick erc-notify-list)
 	       (erc-member-ignore-case nick erc-last-ison))
       (setq erc-last-ison (delete (find nick erc-last-ison

File erc-sound.el

 ;  (let ((filepath nil)
 ;	(paths erc-sound-path))
 ;    (while (and paths
-;		(progn (setq filepath (concat (car paths) "/" file))
+;		(progn (setq filepath (expand-file-name file (car paths)))
 ;		       (not (file-exists-p filepath))))
 ;      (setq paths (cdr paths)))
 ;    (if (and (not (and filepath (file-exists-p filepath)))

File erc-speedbar.el

 
 (require 'erc)
 (require 'speedbar)
+(condition-case nil (require 'dframe) (error nil))
+
+(defconst erc-speedbar-version "$Revision$"
+  "ERC Speedbar version.")
 
 ;;; Customization:
 
 (defun erc-speedbar-goto-buffer (text buffer indent)
   "When user clicks on TEXT, goto an ERC buffer.
 The INDENT level is ignored."
-  (let ((bwin (get-buffer-window buffer 0)))
-    (if bwin
-	(progn
-	  (select-window bwin)
-	  (raise-frame (window-frame bwin)))
-      (if speedbar-power-click
-	  (let ((pop-up-frames t)) (select-window (display-buffer buffer)))
-	(select-frame speedbar-attached-frame)
-	(switch-to-buffer buffer)))))
+  (if (featurep 'dframe)
+      (progn
+	(dframe-select-attached-frame speedbar-frame)
+	(let ((bwin (get-buffer-window buffer 0)))
+	  (if bwin
+	      (progn
+		(select-window bwin)
+		(raise-frame (window-frame bwin)))
+	    (if dframe-power-click
+		(let ((pop-up-frames t)) (select-window (display-buffer buffer)))
+	      (dframe-select-attached-frame speedbar-frame)
+	      (switch-to-buffer buffer)))))
+    (let ((bwin (get-buffer-window buffer 0)))
+      (if bwin
+	  (progn
+	    (select-window bwin)
+	    (raise-frame (window-frame bwin)))
+	(if speedbar-power-click
+	    (let ((pop-up-frames t)) (select-window (display-buffer buffer)))
+	  (select-frame speedbar-attached-frame)
+	  (switch-to-buffer buffer))))))
 
 (defun erc-speedbar-line-text ()
   "Return the text for the item on the current line."

File erc-track.el

  (and
   ;; verify examples from the doc strings
   (equal (let ((erc-track-shorten-aggressively nil))
-	   (erc-unique-channel-names
-	    '("#emacs" "#vi" "#electronica" "#folk")
-	    '("#emacs" "#vi")))
-	 '("#em" "#vi")); emacs is different from electronica
+           (erc-unique-channel-names
+            '("#emacs" "#vi" "#electronica" "#folk")
+            '("#emacs" "#vi")))
+         '("#em" "#vi"))	 ; emacs is different from electronica
   (equal (let ((erc-track-shorten-aggressively t))
-	   (erc-unique-channel-names
-	    '("#emacs" "#vi" "#electronica" "#folk")
-	    '("#emacs" "#vi")))
-	 '("#em" "#v")); vi is shortened by one letter
+           (erc-unique-channel-names
+            '("#emacs" "#vi" "#electronica" "#folk")
+            '("#emacs" "#vi")))
+         '("#em" "#v"))                ; vi is shortened by one letter
   (equal (let ((erc-track-shorten-aggressively 'max))
-	   (erc-unique-channel-names
-	    '("#emacs" "#vi" "#electronica" "#folk")
-	    '("#emacs" "#vi")))
-	 '("#e" "#v")); emacs need not be different from electronica
+           (erc-unique-channel-names
+            '("#emacs" "#vi" "#electronica" "#folk")
+            '("#emacs" "#vi")))
+         '("#e" "#v"))  ; emacs need not be different from electronica
   (equal (let ((erc-track-shorten-aggressively nil))
-	   (erc-unique-channel-names
-	    '("#linux-de" "#linux-fr")
-	    '("#linux-de" "#linux-fr")))
-	 '("#linux-de" "#linux-fr")); shortening by one letter is too aggressive
+           (erc-unique-channel-names
+            '("#linux-de" "#linux-fr")
+            '("#linux-de" "#linux-fr")))
+         '("#linux-de" "#linux-fr")) ; shortening by one letter is too aggressive
   (equal (let ((erc-track-shorten-aggressively t))
 	   (erc-unique-channel-names
 	    '("#linux-de" "#linux-fr")
 	 '("#linux-d" "#linux-f")); now we want to be aggressive
   ;; specific problems
   (equal (let ((erc-track-shorten-aggressively nil))
-	   (erc-unique-channel-names
-	    '("#dunnet" "#lisp" "#sawfish" "#fsf" "#guile"
-	      "#testgnome" "#gnu" "#fsbot" "#hurd" "#hurd-bunny"
-	      "#emacs")
-	    '("#hurd-bunny" "#hurd" "#sawfish" "#lisp")))
-	   '("#hurd-" "#hurd" "#s" "#l"))
+           (erc-unique-channel-names
+            '("#dunnet" "#lisp" "#sawfish" "#fsf" "#guile"
+              "#testgnome" "#gnu" "#fsbot" "#hurd" "#hurd-bunny"
+              "#emacs")
+            '("#hurd-bunny" "#hurd" "#sawfish" "#lisp")))
+         '("#hurd-" "#hurd" "#s" "#l"))
   (equal (let ((erc-track-shorten-aggressively nil))
-	   (erc-unique-substrings
-	    '("#emacs" "#vi" "#electronica" "#folk")))
-	 '("#em" "#vi" "#el" "#f"))
+           (erc-unique-substrings
+            '("#emacs" "#vi" "#electronica" "#folk")))
+         '("#em" "#vi" "#el" "#f"))
   (equal (let ((erc-track-shorten-aggressively t))
-	   (erc-unique-substrings
-	    '("#emacs" "#vi" "#electronica" "#folk")))
-	 '("#em" "#v" "#el" "#f"))
+           (erc-unique-substrings
+            '("#emacs" "#vi" "#electronica" "#folk")))
+         '("#em" "#v" "#el" "#f"))
   (equal (let ((erc-track-shorten-aggressively nil))
-	   (erc-unique-channel-names
-	    '("#emacs" "#burse" "+linux.de" "#starwars"
-	      "#bitlbee" "+burse" "#ratpoison")
-	    '("+linux.de" "#starwars" "#burse")))
-	 '("+l" "#s" "#bu"))
+           (erc-unique-channel-names
+            '("#emacs" "#burse" "+linux.de" "#starwars"
+              "#bitlbee" "+burse" "#ratpoison")
+            '("+linux.de" "#starwars" "#burse")))
+         '("+l" "#s" "#bu"))
   (equal (let ((erc-track-shorten-aggressively nil))
-	   (erc-unique-channel-names
-	    '("fsbot" "#emacs" "deego")
-	    '("fsbot")))
-	 '("fs"))
+           (erc-unique-channel-names
+            '("fsbot" "#emacs" "deego")
+            '("fsbot")))
+         '("fs"))
   (equal (let ((erc-track-shorten-aggressively nil))
-	   (erc-unique-channel-names
-	    '("fsbot" "#emacs" "deego")
-	    '("fsbot")
-	    (lambda (s)
-	      (> (length s) 4))
-	    1))
-	 '("f"))
+           (erc-unique-channel-names
+            '("fsbot" "#emacs" "deego")
+            '("fsbot")
+            (lambda (s)
+              (> (length s) 4))
+            1))
+         '("f"))
   (equal (let ((erc-track-shorten-aggressively nil))
-	   (erc-unique-channel-names
-	    '("fsbot" "#emacs" "deego")
-	    '("fsbot")
-	    (lambda (s)
-	      (> (length s) 4))
-	    2))
-	 '("fs"))
+           (erc-unique-channel-names
+            '("fsbot" "#emacs" "deego")
+            '("fsbot")
+            (lambda (s)
+              (> (length s) 4))
+            2))
+         '("fs"))
   (let ((erc-track-shorten-aggressively nil))
     (equal (erc-unique-channel-names '("deego" "#hurd" "#hurd-bunny" "#emacs")
-				     '("#hurd" "#hurd-bunny"))
-	   '("#hurd" "#hurd-")))
+                                     '("#hurd" "#hurd-bunny"))
+           '("#hurd" "#hurd-")))
   ;; general examples
   (let ((erc-track-shorten-aggressively t))
     (and (equal (erc-unique-substring-1 "abc" '("ab" "abcd")) "abcd")
-	 (not (erc-unique-substring-1 "a" '("xyz" "xab")))
-	 (equal (erc-unique-substrings '("abc" "xyz" "xab")) 
-		'("ab" "xy" "xa"))
-	 (equal (erc-unique-substrings '("abc" "abcdefg"))
-		'("abc" "abcd"))))
+         (not (erc-unique-substring-1 "a" '("xyz" "xab")))
+         (equal (erc-unique-substrings '("abc" "xyz" "xab")) 
+                '("ab" "xy" "xa"))
+         (equal (erc-unique-substrings '("abc" "abcdefg"))
+                '("abc" "abcd"))))
   (let ((erc-track-shorten-aggressively nil))
     (and (equal (erc-unique-substring-1 "abc" '("ab" "abcd")) "abcd")
-	 (not (erc-unique-substring-1 "a" '("xyz" "xab")))
-	 (equal (erc-unique-substrings '("abc" "xyz" "xab")) 
-		'("abc" "xyz" "xab"))
-	 (equal (erc-unique-substrings '("abc" "abcdefg")) 
-		'("abc" "abcd"))))))
+         (not (erc-unique-substring-1 "a" '("xyz" "xab")))
+         (equal (erc-unique-substrings '("abc" "xyz" "xab")) 
+                '("abc" "xyz" "xab"))
+         (equal (erc-unique-substrings '("abc" "abcdefg")) 
+                '("abc" "abcd"))))))
 
 ;;; Module
 
          (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-hook 'erc-user-is-active))
+   (add-hook 'erc-server-001-functions 'erc-user-is-active))
   ((setq global-mode-string
 	 (delq 'erc-modified-channels-string global-mode-string))
    (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-hook 'erc-user-is-active)
+   (remove-hook 'erc-server-001-functions 'erc-user-is-active)
    (remove-hook 'erc-timer-hook 'erc-user-is-active)))
 
 ;;; Visibility
 (assert
  (let ((str "is bold"))
    (put-text-property 3 (length str)
-		      'face '(bold erc-current-nick-face)
-		      str)
+                      'face '(bold erc-current-nick-face)
+                      str)
    (erc-faces-in str)))
 
 (defun erc-find-parsed-property ()
 (require 'pp)
 (require 'thingatpt)
 (require 'erc-compat)
+(require 'erc-backend)
 
 (defconst erc-version-string "Version 4.0 $Revision$"
   "ERC version.  This is used by function `erc-version'.")
 
 (defcustom erc-disconnected-hook nil
   "Run this hook with arguments (NICK IP REASON) when disconnected.
-This happens before automatic reconnection.  Note, that `erc-server-QUIT-hook'
-might not be run when we disconnect, simply because we do not necessarily
-receive the QUIT event."
+This happens before automatic reconnection.  Note, that
+`erc-server-QUIT-functions' might not be run when we disconnect,
+simply because we do not necessarily receive the QUIT event."
   :group 'erc-hooks
   :type 'hook)
 
 without arguments, with the current buffer set to the buffer of
 the new channel.
 
-See also `erc-server-JOIN-hook', `erc-part-hook'."
+See also `erc-server-JOIN-functions', `erc-part-hook'."
   :group 'erc-hooks
   :type 'hook)
 
   "Hook run when processing a quit command directed at our nick.
 
 The hook receives one argument, the current PROCESS.
-See also `erc-server-QUIT-hook' and `erc-disconnected-hook'."
+See also `erc-server-QUIT-functions' and `erc-disconnected-hook'."
   :group 'erc-hooks
   :type 'hook)
 
   "Hook run when processing a PART message directed at our nick.
 
 The hook receives one argument, the current BUFFER.
-See also `erc-server-QUIT-hook', `erc-quit-hook' and
+See also `erc-server-QUIT-functions', `erc-quit-hook' and
 `erc-disconnected-hook'."
   :group 'erc-hooks
   :type 'hook)
   "Hook run when processing a KICK message directed at our nick.
 
 The hook receives one argument, the current BUFFER.
-See also `erc-server-PART-hook' and `erc-part-hook'."
+See also `erc-server-PART-functions' and `erc-part-hook'."
   :group 'erc-hooks
   :type 'hook)
 
 
 (defsubst erc-channel-user-op-p (nick)
   "Return `t' if NICK is an operator in the current channel."
-  (and (hash-table-p erc-channel-users)
+  (and nick
+       (hash-table-p erc-channel-users)
        (let ((cdata (erc-get-channel-user nick)))
 	 (and cdata (cdr cdata)
 	      (erc-channel-user-op (cdr cdata))))))
 
 (defsubst erc-channel-user-voice-p (nick)
   "Return `t' if NICK has voice in the current channel."
-  (and (hash-table-p erc-channel-users)
+  (and nick
+       (hash-table-p erc-channel-users)
        (let ((cdata (erc-get-channel-user nick)))
 	 (and cdata (cdr cdata)
 	      (erc-channel-user-voice (cdr cdata))))))
 (defvar erc-log-p nil
   "When set to t, generate debug messages in a separate debug buffer.")
 
-(defvar erc-debug-log-file (concat (expand-file-name ".") "/ERC.debug")
+(defvar erc-debug-log-file (expand-file-name "ERC.debug")
   "Debug log file name.")
 
 (defvar erc-dbuf nil)
 	     (quote
 	      ,mode))))))
 
-;; We need these functions in erc-once-with-server-event, so we need
-;; them when compiling.
-(eval-and-compile
-  (defun erc-event-to-hook-name (event)
-    "Return the name of the hook handling EVENT as stringp."
-    (concat "erc-server-"
-	    (cond
-	     ((symbolp event)
-	      (symbol-name event))
-	     ((numberp event)
-	      (format "%03i" event))
-	     ((stringp event)
-	      event)
-	     (t
-	      (error
-	       "EVENT should be a symbol or a number")))
-	    "-hook"))
-
-  (defun erc-event-to-hook (event)
-    "Return the hook handling EVENT as symbolp."
-    (intern (erc-event-to-hook-name event)))
-  ) ; eval-and-compile
-
-
 (defun erc-once-with-server-event (event &rest forms)
   "Execute FORMS the next time EVENT occurs in the `current-buffer'.
 
     (error
      "You should only run `erc-once-with-server-event' in a server buffer"))
   (let ((fun (gensym))
-	(hook (erc-event-to-hook event)))
+	(hook (erc-get-hook event)))
      (put fun 'erc-original-buffer (current-buffer))
      (fset fun `(lambda (proc parsed)
 		  (with-current-buffer (get ',fun 'erc-original-buffer)
 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 (gensym))
-	(hook (erc-event-to-hook event)))
+	(hook (erc-get-hook event)))
      (fset fun `(lambda (proc parsed)
 		  (remove-hook ',hook ',fun)
 		  (fmakunbound ',fun)
 (defun erc-server-buffer ()
   "Return the server buffer for the current buffer's process.
 The buffer-local variable `erc-process' is used to find the process buffer."
-  (and (boundp 'erc-process)
-       (processp erc-process)
+  (and (erc-server-buffer-live-p)
        (process-buffer erc-process)))
 
+(defun erc-server-buffer-live-p ()
+  "Return t if the buffer associated with `erc-process' has not been killed."
+  (and (processp erc-process)
+       (buffer-live-p (process-buffer erc-process))))
+
 (defun erc-server-buffer-p (&optional buffer)
   "Return non-nil if argument BUFFER is an ERC server buffer.
 
 If OUTBOUND is non-nil, STRING is being sent to the IRC server
 and appears in erc-input-face in the buffer."
   (when erc-debug-irc-protocol
-    (with-current-buffer (get-buffer-create "*erc-protocol*")
-      (save-excursion
-	(goto-char (point-max))
-	(let ((inhibit-read-only t))
-	  (insert (if (not outbound)
-		      string
-		    (erc-propertize
-		     (concat ">>> " string
-			     (if (/= ?\n
-				     (aref string
-					   (1- (length string))))
-				 "\n"))
-		     'face 'erc-input-face)))))
-      (let ((orig-win (selected-window))
-	    (debug-buffer-window (get-buffer-window (current-buffer) t)))
-	(when debug-buffer-window
-	  (select-window debug-buffer-window)
-	  (when (= 1 (count-lines (point) (point-max)))
-	    (goto-char (point-max))
-	    (recenter -1))
-	  (select-window orig-win))))))
+    (let ((network-name (or (ignore-errors (erc-network-name))
+			    "???")))
+      (with-current-buffer (get-buffer-create "*erc-protocol*")
+        (save-excursion
+	  (goto-char (point-max))
+	  (let ((inhibit-read-only t))
+	    (insert (if (not outbound)
+			;; Cope with the fact that string might contain multiple lines of text.
+			(let ((lines (split-string string "\n\\|\r\n"))
+			      (result ""))
+			  (dolist (line lines)
+			    (setq result (concat result network-name " << " line "\n")))
+			  result)
+		      (erc-propertize
+			(concat network-name " >> " string
+				(if (/= ?\n
+					(aref string
+					      (1- (length string))))
+				    "\n"))
+			'face 'erc-input-face)))))
+	(let ((orig-win (selected-window))
+	      (debug-buffer-window (get-buffer-window (current-buffer) t)))
+	  (when debug-buffer-window
+	     (select-window debug-buffer-window)
+	     (when (= 1 (count-lines (point) (point-max)))
+	       (goto-char (point-max))
+	       (recenter -1))
+	     (select-window orig-win)))))))
 
 (defun erc-toggle-debug-irc-protocol (&optional arg)
   "Toggle the value of `erc-debug-irc-protocol'.
     (with-current-buffer buf
       (view-mode 1)
       (when (null (current-local-map))
+	(let ((inhibit-read-only t))
+	  (insert (erc-make-notice "This buffer displays all IRC protocol traffic exchanged with each server.\n"))
+	  (insert (erc-make-notice "Kill this buffer to terminate protocol logging.\n\n")))
 	(use-local-map (make-sparse-keymap))
 	(local-set-key (kbd "RET") 'erc-toggle-debug-irc-protocol))
       (add-hook 'kill-buffer-hook
       (goto-char (point-max))
       (let ((inhibit-read-only t))
 	(insert (erc-make-notice
-		 (format "IRC protocol logging %s at %s\n"
+		 (format "IRC protocol logging %s at %s -- Press ENTER to toggle logging.\n"
 			 (if erc-debug-irc-protocol "disabled" "enabled")
 			 (current-time-string))))))
     (setq erc-debug-irc-protocol (not erc-debug-irc-protocol))
   "Filter function for incoming server traffic.
 PROC is the process where input came from and
 STRING is the string received."
-  (erc-log-irc-protocol string)
   (with-current-buffer (process-buffer proc)
+    (erc-log-irc-protocol string)
     (mapc (lambda (line)
-	    (erc-parse-line-from-server proc line))
+	    (erc-parse-server-response proc line))
 	  (erc-split-multiline string))))
 
 (defun erc-process-sentinel (cproc event)
 			(erc-buffer-list nil erc-process)))
 		  ((eq 'active buffer)
 		   (and erc-active-buffer (list erc-active-buffer)))
-		  ((and (boundp 'erc-process) (processp erc-process))
+		  ((erc-server-buffer-live-p)
 		   (list (process-buffer erc-process)))
 		  (t (list (current-buffer)))))
       (when (buffer-live-p buf)
 	(erc-display-line-1 string buf)
 	(add-to-list 'new-bufs buf)))
     (when (null new-bufs)
-      (if (and (boundp 'erc-process) (processp erc-process))
+      (if (erc-server-buffer-live-p)
 	  (erc-display-line-1 string (process-buffer erc-process))
 	(erc-display-line-1 string (current-buffer))))))
 
 This function relies on the erc-parsed text-property being
 present."
   (let ((prop-val (get-text-property position 'erc-parsed)))
-    (and prop-val (member (aref prop-val 0) list))))
+    (and prop-val (member (erc-response.command prop-val) list))))
 
 (defvar erc-send-input-line-function 'erc-send-input-line)
 (make-variable-buffer-local 'erc-send-input-line-function)
 	    (setq chnl invitation)
 	  (erc-display-message nil 'error (current-buffer) 'no-invitation))
       (setq chnl (erc-ensure-channel-name channel)))
-
-    ;; Prevent double joining of same channel on same server.
-    (let ((joined-channels
-	   (mapcar #'(lambda (chanbuf)
-		       (with-current-buffer chanbuf (erc-default-target)))
-		   (erc-channel-list erc-process))))
-      (if (erc-member-ignore-case chnl joined-channels)
-	  (switch-to-buffer (car (member-ignore-case chnl joined-channels)))
-	(erc-log (format "cmd: JOIN: %s" chnl))
-	(if (and chnl key)
-	    (erc-send-command (format "JOIN %s %s" chnl key))
-	  (erc-send-command (format "JOIN %s" chnl))))))
+    (when chnl
+      ;; Prevent double joining of same channel on same server.
+      (let ((joined-channels
+	     (mapcar #'(lambda (chanbuf)
+			 (with-current-buffer chanbuf (erc-default-target)))
+		     (erc-channel-list erc-process))))
+	(if (erc-member-ignore-case chnl joined-channels)
+	    (switch-to-buffer (car (member-ignore-case chnl joined-channels)))
+	  (erc-log (format "cmd: JOIN: %s" chnl))
+	  (if (and chnl key)
+	      (erc-send-command (format "JOIN %s %s" chnl key))
+	    (erc-send-command (format "JOIN %s" chnl)))))))
   t)
 
 (defalias 'erc-cmd-CHANNEL 'erc-cmd-JOIN)
     (with-current-buffer serverbuf
       (add-to-list 'symlist
 		   (cons (erc-once-with-server-event
-			  311 `(string= ,nick (aref parsed 3)))
-			 'erc-server-311-hook))
+			  311 `(string= ,nick
+					(second
+					 (erc-response.command-args parsed))))
+			 'erc-server-311-functions))
       (add-to-list 'symlist
 		   (cons (erc-once-with-server-event
-			  312 `(string= ,nick (aref parsed 3)))
-			 'erc-server-312-hook))
+			  312 `(string= ,nick
+					(second
+					 (erc-response.command-args parsed))))
+			 'erc-server-312-functions))
       (add-to-list 'symlist
 		   (cons (erc-once-with-server-event
-			  318 `(string= ,nick (aref parsed 3)))
-			 'erc-server-318-hook))
+			  318 `(string= ,nick
+					(second
+					 (erc-response.command-args parsed))))
+			 'erc-server-318-functions))
       (add-to-list 'symlist
 		   (cons (erc-once-with-server-event
-			  319 `(string= ,nick (aref parsed 3)))
-			 'erc-server-319-hook))
+			  319 `(string= ,nick
+					(second