aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiles Bader2007-04-01 13:36:38 +0000
committerMiles Bader2007-04-01 13:36:38 +0000
commitff59d266c7dcb9c6f7cc7ff7942510bda288e167 (patch)
tree9cc762d166a00ae8d02c9f079890afb68125072e
parent25c8c1594fe7ba177ec0621260304181b7052af3 (diff)
downloademacs-ff59d266c7dcb9c6f7cc7ff7942510bda288e167.tar.gz
emacs-ff59d266c7dcb9c6f7cc7ff7942510bda288e167.zip
Release ERC 5.2.
I have updated the version of ERC to 5.2, since it fixes a bug with C-c C-SPC being bound globally by default. For the full list of changes in this version, see etc/ERC-NEWS. Revision: emacs@sv.gnu.org/emacs--devo--0--patch-687 Creator: Michael Olson <mwolson@gnu.org>
-rw-r--r--etc/ChangeLog5
-rw-r--r--etc/ERC-NEWS252
-rw-r--r--lisp/erc/ChangeLog1516
-rw-r--r--lisp/erc/ChangeLog.061457
-rw-r--r--lisp/erc/erc-autoaway.el125
-rw-r--r--lisp/erc/erc-backend.el198
-rw-r--r--lisp/erc/erc-button.el16
-rw-r--r--lisp/erc/erc-capab.el30
-rw-r--r--lisp/erc/erc-compat.el8
-rw-r--r--lisp/erc/erc-fill.el11
-rw-r--r--lisp/erc/erc-ibuffer.el3
-rw-r--r--lisp/erc/erc-identd.el34
-rw-r--r--lisp/erc/erc-log.el78
-rw-r--r--lisp/erc/erc-match.el9
-rw-r--r--lisp/erc/erc-menu.el7
-rw-r--r--lisp/erc/erc-netsplit.el2
-rw-r--r--lisp/erc/erc-networks.el8
-rw-r--r--lisp/erc/erc-notify.el5
-rw-r--r--lisp/erc/erc-pcomplete.el4
-rw-r--r--lisp/erc/erc-ring.el3
-rw-r--r--lisp/erc/erc-services.el100
-rw-r--r--lisp/erc/erc-speedbar.el5
-rw-r--r--lisp/erc/erc-spelling.el40
-rw-r--r--lisp/erc/erc-stamp.el18
-rw-r--r--lisp/erc/erc-track.el187
-rw-r--r--lisp/erc/erc.el354
-rw-r--r--man/ChangeLog4
-rw-r--r--man/erc.texi296
28 files changed, 3002 insertions, 1773 deletions
diff --git a/etc/ChangeLog b/etc/ChangeLog
index b31384e71a0..4b9f3e0c150 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,8 @@
12007-04-01 Michael Olson <mwolson@gnu.org>
2
3 * ERC-NEWS: Update for the ERC 5.2 release. Most of these entries
4 were for previously-committed changes.
5
12007-03-31 Michael Albinus <michael.albinus@gmx.de> 62007-03-31 Michael Albinus <michael.albinus@gmx.de>
2 7
3 * PROBLEMS: Remove Tramp problem; it has been fixed. 8 * PROBLEMS: Remove Tramp problem; it has been fixed.
diff --git a/etc/ERC-NEWS b/etc/ERC-NEWS
index dd5c113c195..e7b0dcb81bf 100644
--- a/etc/ERC-NEWS
+++ b/etc/ERC-NEWS
@@ -3,8 +3,7 @@ ERC NEWS -*- outline -*-
3Copyright (C) 2006, 2007 Free Software Foundation, Inc. 3Copyright (C) 2006, 2007 Free Software Foundation, Inc.
4See the end of the file for license conditions. 4See the end of the file for license conditions.
5 5
6 6* Changes in ERC 5.2
7* Changes in ERC 5.2 (stable pre-release for Emacs 22)
8 7
9** M-x erc RET now starts ERC. 8** M-x erc RET now starts ERC.
10`erc-select' has been changed to `erc'. `erc-select' still remains as 9`erc-select' has been changed to `erc'. `erc-select' still remains as
@@ -12,37 +11,173 @@ an alias of `erc'. Likewise, `erc-select-ssl' has been renamed to
12`erc-ssl' with `erc-select-ssl' as its alias. The function that was 11`erc-ssl' with `erc-select-ssl' as its alias. The function that was
13known as `erc' is now `erc-open'. 12known as `erc' is now `erc-open'.
14 13
14** Open query buffers by default when private messages are received.
15The default value of `erc-auto-query' has been changed to 'bury.
16
15** New command: /RECONNECT 17** New command: /RECONNECT
16This command tries to reconnect to the current IRC server exactly 18This command tries to reconnect to the current IRC server exactly
17once. It does not work in server buffers (throws an error before the 19once. It does not work in server buffers (throws an error before the
18command is run), but works in query and channel buffers. 20command is run), but works in query and channel buffers.
19 21
22** In MS-DOS environments, look for _ercrc.el rather than .ercrc.el.
23
24** Fix buggy interaction with multi-tty Emacs.
25
26** After running /QUIT, make sure that the IRC process is killed within
274 seconds. Freenode, in particular, needs this at times.
28
29** If the IRC process has not responded to our PINGs within a certain
30time, kill it and restart the connection. See
31`erc-server-auto-reconnect', `erc-server-reconnect-attempts',
32`erc-server-reconnect-timeout', `erc-server-send-ping-interval', and
33`erc-server-send-ping-timeout' to fine-tune ERC's behavior.
34
35** Avoid getting into an infinite connection loop.
36Previously, this could happen if your nick was banned, you were using
37Tor, incorrect information was entered, or the connection was bad.
38
39** Make ban messages less confusing.
40
41** Restore the point correctly when reconnecting to an IRC server.
42
43** Make /IGNORE and /UNIGNORE prompt to determine whether their
44argument is a user or a regexp. This results in less-confusing
45behavior when trying to ignore someone who has a bracket in their
46nick.
47
48** Make the default port "6667" rather than "ircd", because some
49operating systems don't know what port "ircd" maps to.
50
51** Fix several bugs in erc-iswitchb (C-c C-b).
52
53** Clean up internal documentation.
54Special thanks go to Juanma Barranquero for the thorough vetting of
55ERC's internal documentation.
56
57** Display a more informative message when a module is not found.
58
59** Fix a bug where paths were being colored like IRC commands.
60
61** In the customize interface for `erc-modules', add the name of the module.
62This makes it easier to find modules by name.
63
64** erc-server-send-ping-interval: Change to use a default of 30 seconds.
65
66** Some files which are included with the release of ERC 5.2 will not
67appear in the version of ERC that is bundled with Emacs 22. These
68extras files may be found at:
69
70 o http://ftp.gnu.org/gnu/erc/erc-5.2-extras.tar.gz, or
71 o http://ftp.gnu.org/gnu/erc/erc-5.2-extras.zip.
72
73** Renamed files
74
75Several files were renamed so as to make them distinct to users of the
76MS-DOS operating system.
77
78 o erc-autojoin.el -> erc-join.el
79 o erc-complete.el -> erc-hecomplete.el
80 o erc-nickserv.el -> erc-services.el
81 o ChangeLog.NNNN -> ChangeLog.NN
82
83** Header line changes
84
85*** Remove "[IRC]" from the header line.
86
87*** Add the %l format character to `erc-header-line-format',
88
89*** Document how to remove the header line.
90Namely: (setq erc-header-line-format nil).
91
20** New options 92** New options
21 93
22*** erc-server-reconnect-attempts: Determines the number of 94*** erc-server-reconnect-attempts: Determines the number of
23reconnection attempts that ERC will make per server. 95reconnection attempts that ERC will make per server.
24 96
25*** erc-server-reconnect-timeout: New option that determines the 97*** erc-server-reconnect-timeout: Determines the amount of time,
26amount of time, in seconds, that ERC will wait between successive 98in seconds, that ERC will wait between successive reconnect attempts.
27reconnect attempts. 99
100*** erc-server-send-ping-timeout: Determines when to consider a connection
101stalled and restart it. The default is after 120 seconds.
102
103*** erc-system-name: Determines the system name to use when logging in.
104The default is to figure this out by calling `system-name'.
28 105
29** New face: `erc-my-nick-face' 106** New face: `erc-my-nick-face'
30This helps make it easier to distinguish messages sent by yourself 107This helps make it easier to distinguish messages sent by yourself
31from messages sent by other users when the value of the variable 108from messages sent by other users when the value of the variable
32`erc-show-my-nick' is non-nil. 109`erc-show-my-nick' is non-nil.
33 110
111** Namespace changes
112
113*** New macro: `erc-with-server-buffer'
114Switches to the current ERC server buffer and runs some code. If no
115server buffer is available, return nil. This is a useful way to
116access variables in the server buffer.
117
118*** New function: `erc-open-server-buffer-p'
119Returns non-nil if the given buffer is an ERC server buffer that has
120an open IRC process.
121
122*** New function: `erc-format-lag-time'
123Returns the estimated lag time to server, `erc-server-lag'.
124
125*** Renamed items
126
127 o `erc-server-setup-periodical-server-ping' is now
128 `erc-server-setup-periodical-ping'
129
130 o `erc-away-p' is now `erc-away-time'
131
132** Changes to the ERC manual
133
134*** New section: Sample Session.
135Describes a sample ERC session for connecting to the #emacs channel on
136Freenode. Also mention the #erc channel.
137
138*** New section: Special Features.
139Describes some of the special features of ERC.
140
141*** Getting Started: Mention ~/.emacs.d/.ercrc.el and the Customize
142interface.
143
144*** Development: Mention ErcDevelopment page on emacswiki.org.
145
146*** Tips and Tricks: Remove empty section for now.
147
148*** Options: Mention how to see available ERC options.
149
150*** Sample Configuration: Add an example of how to configure ERC.
151
34** New modules 152** New modules
35 153
154*** Autoaway (erc-autoaway.el)
155
156**** Make this much more reliable.
157
158**** Avoid duplicate messages when coming back from being away.
159
160**** Fix bug where autoaway was enabled just by loading the file.
161
162*** BBDB (erc-bbdb.el)
163
164**** Display information on how to cancel merging of info or how to
165create a new John Doe record.
166
167**** Make it so that information from /whois continues to come in, even
168while prompting for a record to merge.
169
170**** Make hitting C-g correctly abort merging the record.
171
36*** Capab identify (erc-capab.el) 172*** Capab identify (erc-capab.el)
37Mark users who haven't identified to NickServ on servers supporting 173Mark users who haven't identified to NickServ on servers supporting
38CAPAB IDENTIFY-MSG. 174CAPAB IDENTIFY-MSG.
39 175
40** Changes and additions to modules 176** Changes and additions to modules
41 177
42*** Channel lists (erc-list.el) 178*** Button (erc-button.el)
43 179
44**** This has been removed from Emacs 22, since a major contributor 180**** Make <backtab> go to the previous button.
45to it has not yet assigned changes.
46 181
47*** Channel tracking (erc-track.el) 182*** Channel tracking (erc-track.el)
48 183
@@ -50,6 +185,103 @@ to it has not yet assigned changes.
50This helps people using a mouse know that they are buttons and can be 185This helps people using a mouse know that they are buttons and can be
51clicked on. 186clicked on.
52 187
188**** Fix issue where C-c C-SPC could conflict with user-defined keybindings.
189This is accomplished by moving these bindings to their own global
190minor mode. Now the default is to check whether the user has bound
191something to C-c C-SPC or C-c C-@. If they have, prompt them about
192whether to really override that binding. This also has the effect of
193preventing ERC from clobbering rcirc's keybinding, unless this is
194desired. See `erc-track-enable-keybindings' for more details.
195
196**** New option: erc-track-enable-keybindings.
197Determine whether or not to enable the C-c C-SPC and C-c C-@
198keybindings. The default is to ask whether to do this if a binding to
199these keys already exists. It can also be set to t or nil to always
200bind or never bind, respectively.
201
202**** Remove `track-when-inactive' module.
203See `erc-track-when-inactive' for further details.
204
205**** New option: erc-track-when-inactive.
206This option replaces the track-when-inactive module. Set it to
207non-nil to track activity even in visible buffers when inactive. The
208default is nil.
209
210**** Remove the `track-modified-channels' alias for the `track' module.
211
212*** DCC support (erc-dcc.el)
213
214**** Add Usage section to Commentary.
215
216**** Fix a bug in the server message output.
217
218*** Filling (erc-fill.el)
219
220**** Fix bug involving messages that start with one or more blank lines.
221
222*** Identd (erc-identd.el)
223
224**** New option `erc-identd-port'
225Specifies the port to use if none is given as an argument to
226`erc-identd-start'. This is placed in the new customization group
227`erc-identd'.
228
229**** New function: `erc-identd-quickstart'
230Ignores any arguments and calls `erc-identd-start'.
231
232*** Channel lists (erc-list.el)
233
234**** Enable by default, except in the version of ERC bundled with Emacs 22.
235
236*** Logging (erc-log.el)
237
238**** Make sure filenames are safe to use before writing to them.
239
240**** Save all log buffers when exiting Emacs.
241
242**** erc-generate-log-file-name-function: Add option for
243`erc-generate-log-file-name-network', which is a new function that
244uses the network name rather than the server name when possible.
245
246*** Menu (erc-menu.el)
247
248**** Name the menu "ERC" instead of "IRC" to avoid confusion with rcirc
249and other clients.
250
251**** Make this into a proper module and load it by default.
252
253**** Add "Current channel" submenu.
254
255*** Networks (erc-networks.el)
256
257**** Add support for Ars OpenIRC, LinuxChix, and OFTC networks.
258
259**** Escape periods in Konfido.Net and Kewl.Org.
260
261*** Internet services / Nickserv (erc-nickserv.el)
262
263**** Add new 'both method for the `erc-nickserv-identify-mode' option
264and make it the default. This tries to do the right thing both when a
265known nickserv message exists for an IRC network, and when it does
266not.
267
268**** Support nickserv authentication on OFTC, Azzurra, Ars, and QuakeNet.
269
270**** Support authentication on BitlBee.
271
272**** Make source code easier to understand by using accessor functions.
273
274*** Sound support (erc-sound.el)
275
276**** Make this work with both Emacs 21 and Emacs 22.
277
278*** Timestamps (erc-stamp.el)
279
280**** Exclude the newline from the erc-timestamp field.
281
282**** New function: `erc-toggle-timestamps'.
283Toggles display of timestamps.
284
53* Changes in ERC 5.1.4 285* Changes in ERC 5.1.4
54 286
55** Make find-function and find-variable work in Emacs 22 for 287** Make find-function and find-variable work in Emacs 22 for
@@ -156,6 +388,10 @@ to make the BBDB buffer electric. This defaults to not electric.
156 388
157**** Don't create an extra buffer for the identd process. 389**** Don't create an extra buffer for the identd process.
158 390
391*** Channel lists (erc-list.el)
392
393**** Enable by default, except in the version of ERC bundled with Emacs 22.
394
159*** Logging (erc-log.el) 395*** Logging (erc-log.el)
160 396
161**** By default, don't insert old logs when opening an ERC buffer. 397**** By default, don't insert old logs when opening an ERC buffer.
diff --git a/lisp/erc/ChangeLog b/lisp/erc/ChangeLog
index 62e7eaa21fe..70ffa4ede48 100644
--- a/lisp/erc/ChangeLog
+++ b/lisp/erc/ChangeLog
@@ -1,3 +1,259 @@
12007-04-01 Michael Olson <mwolson@gnu.org>
2
3 * erc.el (erc-version-string): Release ERC 5.2.
4
5 * erc-auto.in, erc-chess.el, erc-list.el, erc-speak.el:
6 * erc-viper.el: Update copyright notices.
7
8 * erc.texi: Make Emacs Lisp source code in this document
9 essentially public domain. Update version to 5.2.
10 (Obtaining ERC): Mention extras tarball.
11 (Releases): Mention local GNU mirror.
12 (Sample Configuration): Remove notice.
13
14 * FOR-RELEASE (5.3): Add item for erc-nicklist.
15 Mark NEWS as done. Mark extras tarball as done.
16
17 * Makefile (VERSION): Increment to 5.2.
18 (TESTING): Remove.
19 (EXTRAS): New variable containing the contents of our "Emacs 22
20 extras" tarball.
21 (SOURCE): Remove $(TESTING).
22 (MISC): Add COPYING and ChangeLog.06. Fix ChangeLog.NNNN ->
23 ChangeLog.NN.
24 (release): Use $(SNAPDIR) instead of erc-$(VERSION).
25 (extras): New rule which implements the building of the extras
26 tarball.
27 (upload-extras): New rule to upload the extras tarball. It's
28 yucky to replicate upload, but oh well.
29
30 * NEWS: Mention extras tarball. Note which files have been
31 renamed. Note that erc-list is enabled by default, except in
32 Emacs 22.
33
34 * README.extras: New file which serves as a README for the extras
35 tarball.
36
372007-03-31 Michael Olson <mwolson@gnu.org>
38
39 * NEWS: Update for the 5.2 release.
40
41 * FOR-RELEASE: Finish up 5.2 manual item. Add documentation item
42 for 5.3.
43
44 * erc.texi (Sample Session): Flesh out. Mention #erc.
45 (Modules): Defer to 5.3 release.
46 (Advanced Usage): Move Sample Configuration chapter ahead of
47 unfinished chapters.
48 (Sample Configuration): Write.
49 (Options): Mention how to see available ERC options. Defer to 5.3
50 release.
51 (Tips and Tricks): Remove, since it seems better to just include
52 tips and tricks in the sample configuration, commented out.
53
54 * erc-bbdb.el (erc-bbdb-search-name-and-create): Make prompt more
55 informative about how to skip merging.
56 (erc-bbdb-insinuate-and-show-entry-1): Move contents of
57 erc-bbdb-insinuate-and-show-entry here.
58 (erc-bbdb-insinuate-and-show-entry): Run
59 erc-bbdb-insinuate-and-show-entry-1 "outside" of the calling
60 function, so that we can avoid triggering a process-filter error
61 if the user hits C-g.
62
632007-03-30 Michael Olson <mwolson@gnu.org>
64
65 * FOR-RELEASE: Solve C-c C-SPC keybinding dilemma.
66
67 * erc-autoaway.el (erc-autoaway-idle-method): Use `if' rather than
68 `cond' and `set' rather than `set-default'.
69
70 * erc-log.el: Avoid compiler warning by requiring erc-network
71 during compilation.
72 (erc-generate-log-file-name-function): Add tag to each option.
73 Add erc-generate-log-file-name-network.
74 (erc-generate-log-file-name-network): New function which generates
75 a log file name that uses network name rather than server name,
76 when possible.
77
78 * erc-track.el (track): Assimilate track-when-inactive module,
79 since there's no need to have two modules in one file -- an option
80 will do. Remove track-modified-channels alias. Call
81 erc-track-minor-mode-maybe, and tear down the minor mode when
82 disabling.
83 (erc-track-when-inactive): New option which determines whether to
84 track visible buffers when inactive. The default is not to do so.
85 (erc-track-visibility): Mention erc-track-when-inactive.
86 (erc-buffer-visible): Use erc-track-when-inactive.
87 (erc-track-enable-keybindings): New option which determines
88 whether to enable the global-level tracking keybindings. The
89 default is to do so, unless they would override another binding,
90 in which case we prompt the user about it.
91 (erc-track-minor-mode-map): Move global keybindings here.
92 (erc-track-minor-mode): New minor mode which only enables the
93 keybindings and does nothing else.
94 (erc-track-minor-mode-maybe): New function which starts
95 erc-track-minor-mode, but only if it hasn't already been started,
96 an ERC buffer exists, and the user OK's it, depending on the value
97 of `erc-track-enable-keybindings'.
98 (erc-track-switch-buffer): Display a message if someone calls this
99 without first enabling erc-track-mode.
100
1012007-03-17 Michael Olson <mwolson@gnu.org>
102
103 * erc.texi (Development): Mention ErcDevelopment page on
104 emacswiki.
105 (Getting Started): Mention ~/.emacs.d/.ercrc.el and the Customize
106 interface.
107 (Sample Session): New section that has a very rough draft for a
108 sample ERC session.
109 (Special Features): New section that explains some of the special
110 features of ERC. Taken from ErcFeatures on emacswiki, with
111 enhancements.
112
1132007-03-12 Diane Murray <disumu@x3y2z1.net>
114
115 * erc-autoaway.el (erc-autoaway-idle-method): When setting the new
116 value, disable and re-enable `erc-autoaway-mode' only if it was
117 already enabled. This fixes a bug where autoaway was enabled just
118 by loading the file.
119
1202007-03-10 Diane Murray <disumu@x3y2z1.net>
121
122 * erc-capab.el: Added more information to the Usage section.
123 (erc-capab-identify-prefix): Doc fix.
124 (erc-capab-identify-unidentified): New face.
125 (290): Removed. Definition moved to erc-backend.el.
126 (erc-capab-identify-send-messages): Renamed from
127 `erc-capab-send-identify-messages'.
128 (erc-capab-identify-setup): Use it.
129 (erc-capab-identify-get-unidentified-nickname): Renamed from
130 `erc-capab-get-unidentified-nickname'.
131 (erc-capab-identify-add-prefix): Use it. Use
132 `erc-capab-identify-unidentified' as the face.
133
134 * erc-backend.el (290): Moved here from erc-capab.el.
135
136 * erc.el (erc-select): Added an autoload cookie.
137 (erc-message-type-member, erc-restore-text-properties): Use
138 `erc-get-parsed-vector'.
139 (erc-auto-query): Set the default to 'bury since many new users
140 expect private messages from others to be in dedicated query
141 buffers, not the server buffer.
142 (erc-common-server-suffixes): Use "freenode" for freenode.net, not
143 "OPN". Added oftc.net.
144
145 * NEWS: Added note about erc-auto-query's new default setting.
146
1472007-03-03 Michael Olson <mwolson@gnu.org>
148
149 * erc.el (erc-open, erc): Docfixes.
150
1512007-03-02 Michael Olson <mwolson@gnu.org>
152
153 * FOR-RELEASE: Make section for 5.3 release and move erc-backend
154 cleanup there. Awaiting discussion before doing other things.
155 Add tasks for merging filename changes from the 5.2 release
156 branch, and for making a tarball of modules not in Emacs 22. Add
157 item to remind me to update NEWS. Mark backtab entry as done.
158
159 * erc-button.el (button): Add call to `erc-button-add-keys'.
160 (erc-button-keys-added): New variable tracking whether we've added
161 the keys yet.
162 (erc-button-add-keys): New function that adds the <backtab> key to
163 erc-mode-map.
164
165 * erc.texi: Change version to 5.2 (pre-release).
166
1672007-02-15 Michael Olson <mwolson@gnu.org>
168
169 * CREDITS: Update.
170
171 * erc-backend.el (erc-server-send-ping-interval): Change to use a
172 default of 30 seconds. Improve customize interface.
173 (erc-server-send-ping-timeout): New option that determines when to
174 consider a connection stalled and restart it. The default is
175 after 120 seconds.
176 (erc-server-send-ping): Use erc-server-send-ping-timeout instead
177 of erc-server-send-ping-interval. If
178 erc-server-send-ping-timeout is nil, do not ever kill and restart
179 a hung IRC process.
180
181 * erc.el (erc-modules): Include the name of the module in its
182 description. This should make it easier for people to find and
183 enable a particular module.
184
1852007-02-15 Vivek Dasmohapatra <vivek@etla.org>
186
187 * erc.el (erc-cmd-RECONNECT): Kill old process if it is still
188 alive.
189 (erc-message-english-PART): Properly escape "%" characters in
190 reason.
191
192 * erc-backend.el (erc-server-reconnecting): New variable that is
193 set when the user requests a reconnect, but the old process is
194 still alive. This forces the reconnect to work even though the
195 process is killed manually during reconnect.
196 (erc-server-connect): Initialize it.
197 (erc-server-reconnect-p): Use it.
198 (erc-process-sentinel-1): Set it to nil after the first reconnect
199 attempt.
200
2012007-02-07 Diane Murray <disumu@x3y2z1.net>
202
203 * erc-menu.el (erc-menu-definition): Fixed so that the separator
204 is between "Current channel" and "Pals, fools and other keywords",
205 not at the bottom of the "Current channel" submenu.
206
2072007-01-25 Diane Murray <disumu@x3y2z1.net>
208
209 * erc-networks.el (erc-server-alist): Removed SSL server for now
210 since `erc-server-select' doesn't know to use `erc-ssl'.
211
212 * erc-networks.el (erc-server-alist, erc-networks-alist): Added
213 definitions for oftc.net.
214
215 * erc-services.el (erc-nickserv-alist): Fixed OFTC message regexp.
216
2172007-01-22 Michael Olson <mwolson@gnu.org>
218
219 * erc-backend.el (erc-server-error-occurred): New variable that
220 indicates when an error has been signaled by the server. This
221 should fix an infinite reconnect bug when giving some servers a
222 bogus :full-name. Thanks to Angelina Carlton for the report.
223 (erc-server-connect): Initialize erc-server-error-occurred.
224 (erc-server-reconnect-p): Use it.
225 (ERROR): Set it.
226
227 * erc-services.el (erc-nickserv-alist): Alphabetize and add Ars
228 and QuakeNet. Standardize look of entries. Fix type mismatch
229 error in customize interface.
230 (erc-nickserv-passwords): Alphabetize and add missing entries from
231 erc-nickserv-alist.
232
2332007-01-21 Michael Olson <mwolson@gnu.org>
234
235 * erc.el (erc-header-line-format): Document how to disable the
236 header line, and add a customization type for it. Also, make the
237 changes take effect immediately.
238
2392007-01-19 Michael Olson <mwolson@gnu.org>
240
241 * erc.texi (Modules): Document new menu module. Thanks to Leo
242 for noticing.
243
2442007-01-16 Diane Murray <disumu@x3y2z1.net>
245
246 * erc-stamp.el (erc-insert-timestamp-left): Fixed so that the
247 whitespace string filler is hidden correctly when timestamps are
248 hidden.
249 (erc-toggle-timestamps): New function to use instead of
250 `erc-show-timestamps' and `erc-hide-timestamps'.
251
252 * erc.el (erc-restore-text-properties): Moved here from
253 erc-fill.el since it could be useful in general.
254
255 * erc-fill.el (erc-restore-text-properties): Removed.
256
12007-01-13 Michael Olson <mwolson@gnu.org> 2572007-01-13 Michael Olson <mwolson@gnu.org>
2 258
3 * erc.el (erc-command-regexp): New variable that is used to match 259 * erc.el (erc-command-regexp): New variable that is used to match
@@ -73,6 +329,10 @@
73 (erc-format-lag-time): New function. 329 (erc-format-lag-time): New function.
74 (erc-update-mode-line-buffer): Use it. 330 (erc-update-mode-line-buffer): Use it.
75 331
3322007-01-10 Michael Olson <mwolson@gnu.org>
333
334 * erc.el: Fix typo in url-irc-function instructions.
335
762007-01-09 Michael Olson <mwolson@gnu.org> 3362007-01-09 Michael Olson <mwolson@gnu.org>
77 337
78 * erc.el (erc-system-name): New option that determines the system 338 * erc.el (erc-system-name): New option that determines the system
@@ -89,1260 +349,10 @@
89 (erc-menu-add, erc-menu-remove): New functions that add and remove 349 (erc-menu-add, erc-menu-remove): New functions that add and remove
90 the ERC menu. 350 the ERC menu.
91 351
922006-12-28 Michael Olson <mwolson@gnu.org>
93
94 * erc-list.el: Change header to mention that this is part of ERC,
95 rather than GNU Emacs.
96
97 * erc-networks.el (erc-server-alist): Add Ars OpenIRC and
98 LinuxChix networks. Thanks to Angelina Carlton for mentioning
99 them. Properly escape periods in Konfido.Net and Kewl.Org.
100 (erc-networks-alist): Add entries for Ars and LinuxChix, though
101 the latter does not actually provide an announced network name.
102
103 * erc-services.el (erc-nickserv-identify-mode): Add 'both method,
104 which waits for a NickServ message if the network supports it,
105 otherwise sends the password after connecting.
106 (erc-nickserv-identify-mode): Default to 'both.
107 (erc-nickserv-passwords): Add OFTC and Azzurra to custom options.
108 (erc-nickserv-alist): Indentation fix.
109 (erc-nickserv-identify-on-connect)
110 (erc-nickserv-identify-on-nick-change): Handle 'both method.
111
1122006-12-28 Leo <sdl.web@gmail.com> (tiny change)
113
114 * erc.el (erc-iswitchb): Wrap body in unwind-protect so that
115 hitting C-g does not leave iswitchb-mode on.
116
1172006-12-27 Michael Olson <mwolson@gnu.org>
118
119 * erc.el (erc-cmd-RECONNECT): New command that calls
120 erc-server-reconnect.
121
122 * erc-backend.el (erc-server-reconnect-count): New server variable
123 that keeps track of reconnection attempts.
124 (erc-server-reconnect-attempts): New option that determines the
125 number of reconnection attempts that ERC will make per server.
126 (erc-server-reconnect-timeout): New option that determines the
127 amount of time, in seconds, that ERC will wait between successive
128 reconnect attempts.
129 (erc-server-reconnect): New function that reestablishes the
130 current IRC connection. Move some commands from
131 erc-process-sentinel-1 here.
132 (erc-process-sentinel-1): If we have been disconnected, loop until
133 we either reconnect or run out of attempts.
134 (erc-server-reconnect-p): Move higher and make this a defsubst,
135 since I'm worried about the current buffer changing from
136 underneath us. Implement limit of number of reconnect attempts..
137
138 * erc.texi (Getting Started): Update for /RECONNECT command.
139
1402006-12-26 Michael Olson <mwolson@gnu.org>
141
142 * erc.el (erc-open): Restore old point correctly, or at least get
143 closer to doing so than before.
144
1452006-12-13 Leo <sdl.web@gmail.com> (tiny change)
146
147 * erc.el (erc-iswitchb): Temporarily enable iswitchb mode if it
148 isn't active already, instead of leaving it on.
149
1502006-12-10 Juanma Barranquero <lekktu@gmail.com>
151
152 * erc-ezbounce.el (erc-ezb-init-session-list): Doc fix.
153
1542006-12-08 Michael Olson <mwolson@gnu.org>
155
156 * erc.el: Re-evaluate contributions from a contributor, and found
157 them under 15 lines of non-obvious code, so it is safe to remove
158 the copyright notice.
159 (erc-modules): Remove list module.
160
161 * erc-list.el: Remove, since a contributor who has not completed
162 their assignment has contributed significantly more than 15 lines
163 of code to this file.
164
1652006-11-28 Juanma Barranquero <lekktu@gmail.com>
166
167 * erc.el (erc-cmd-BANLIST, erc-cmd-MASSUNBAN): Simplify.
168 (erc-prompt-for-channel-key, erc-ignore-reply-list, erc-send-post-hook)
169 (erc-active-buffer, erc-join-buffer, erc-frame-alist, erc-with-buffer)
170 (erc-modules, erc-display-message-highlight, erc-process-input-line)
171 (erc-cmd-HELP, erc-server-hooks, erc-echo-notice-in-user-buffers)
172 (erc-format-my-nick, erc-echo-notice-in-user-and-target-buffers)
173 (erc-echo-notice-in-first-user-buffer, erc-connection-established)
174 (erc-update-user-nick, erc-update-channel-member, erc-highlight-notice)
175 (erc-command-symbol, erc-add-query, erc-process-script-line)
176 (erc-determine-parameters, erc-client-info, erc-popup-input-buffer):
177 (erc-script-echo): Fix typos in docstrings.
178 (erc-channel-user-op-p, erc-channel-user-voice-p, erc-startup-file-list)
179 (define-erc-module, erc-once-with-server-event)
180 (erc-once-with-server-event-global, erc-debug-irc-protocol)
181 (erc-log-irc-protocol, erc-cmd-LOAD, erc-update-user)
182 (erc-update-current-channel-member, erc-load-script):
183 (erc-mode-line-away-status-format): Doc fixes.
184
1852006-11-20 Andrea Russo <rastandy@inventati.org> (tiny change)
186
187 * erc-dcc.el (erc-dcc-chat-setup): Initialize `erc-input-marker'
188 before calling `erc-display-prompt'.
189
1902006-11-24 Juanma Barranquero <lekktu@gmail.com>
191
192 * erc.el (erc-after-connect, erc-open-ssl-stream)
193 (erc-display-line-1, erc-display-line):
194 * erc-backend.el (005): Fix space/tab mixup in docstrings.
195
1962006-11-20 Michael Olson <mwolson@gnu.org>
197
198 * erc.el (erc-version-string): Call this Version 5.2 stable
199 pre-release, since it diverges slightly from our 5.2 branch, in
200 that unstable features are not included.
201 (erc-update-modules): Display better error message when module not
202 found.
203
2042006-11-12 Michael Olson <mwolson@gnu.org>
205
206 * erc-log.el: Save all log buffers when Emacs exits, in case
207 someone ignores the warning about open processes. Remove the
208 advice code in the commentary.
209 (erc-save-query-buffers): Docfix.
210 (erc-log-save-all-buffers): New function that saves all ERC
211 buffers to logs.
212 (erc-current-logfile): Fix bug in filename selection, where the
213 current buffer was erroneously being preferred over the given
214 buffer.
215
2162006-11-08 Michael Olson <mwolson@gnu.org>
217
218 * erc.el (erc-string-to-port): Avoid error when a numerical port
219 is passed. Thanks to Zekeriya KOÇ for the report.
220
2212006-11-08 Łukasz Demianiuk <ldemianiuk@gmail.com> (tiny change)
222
223 * erc.el (erc-header-line): Fix typo.
224
2252006-11-06 Juanma Barranquero <lekktu@gmail.com>
226
227 * erc-dcc.el (erc-dcc-send-file): Fix typo in error message.
228
229 * erc.el (read-passwd):
230 * erc-autoaway.el (erc-autoaway-reestablish-idletimer):
231 * erc-truncate.el (truncate): Fix typo in docstring.
232
2332006-10-21 Michael Olson <mwolson@gnu.org>
234
235 * erc.el (erc-iswitchb): Fix bug when hitting C-c C-b without
236 first loading iswitchb. Thanks to Leo for the report.
237
2382006-10-10 Michael Olson <mwolson@gnu.org>
239
240 * erc.el (erc-default-port): Make the default be 6667 instead of
241 ircd. since Mac OS X apparently has problems with looking up that
242 port name.
243
244 * erc-backend.el (353): Receive names after displaying the initial
245 message, instead of before.
246
2472006-10-05 Diane Murray <disumu@x3y2z1.net>
248
249 * erc.el (erc-my-nick-face): New face.
250 (erc): Use FULL-NAME argument, not `erc-user-full-name'. This
251 fixes a bug where the :full-name argument passed to the function
252 was not respected.
253 (erc-format-my-nick): Use `erc-my-nick-face'. This should help
254 make it easier to find messages you sent in conversations when
255 `erc-show-my-nick' is non-nil.
256 (erc-compute-server): Doc fix.
257
2582006-10-01 John J Foerch <jjfoerch@earthlink.net> (tiny change)
259
260 * erc-stamp.el (erc-insert-timestamp-right): Exclude the newline
261 from the erc-timestamp field.
262
2632006-09-11 Michael Olson <mwolson@gnu.org>
264
265 * erc-nicklist.el (erc-nicklist-insert-contents): Add missing
266 parenthesis. Thanks to Stephan Stahl for the report.
267
2682006-09-10 Eric Hanchrow <offby1@blarg.net> (tiny change)
269
270 * erc.el (erc-cmd-IGNORE): Prompt user if this might be a regexp
271 instead of a single user.
272
2732006-09-10 Michael Olson <mwolson@gnu.org>
274
275 * erc.el (erc-generate-new-buffer-name): If this is a server
276 buffer and a process exists already, create a new buffer.
277 (erc-open): If the IRC session was continued, restore the old
278 point. Thanks to Stephan Stahl for the report.
279 (erc-member-ignore-case): Coding style tweak.
280 (erc-cmd-UNIGNORE): Quote the user before comparison. If we don't
281 find the user listed verbatim, try to match them against the list
282 using string-match. In this case, prompt as to whether the regexp
283 should be removed.
284 (erc-ignored-user-p): Remove CL-ism.
285
286 * erc-autoaway.el (erc-autoaway-possibly-set-away): Check to see
287 whether we are already away.
288
289 * erc-menu.el: Fix potential compiler warning.
290
2912006-09-07 Diane Murray <disumu@x3y2z1.net>
292
293 * erc.el: Updated Commentary and URL.
294 (erc-iswitchb, erc-display-line, erc-set-modes, erc-update-modes)
295 (erc-arrange-session-in-multiple-windows): No need to check if
296 `erc-server-process' is bound.
297 (erc-server-buffer-live-p): Doc fix.
298 (erc-part-from-channel): Don't use any initial contents at prompt.
299 (erc-format-nick, erc-format-@nick): Doc fix. Use `when'.
300 (s367): Fixed to support only banmask and channel which is the
301 standard. Also, there's no reason to add a message to each banned
302 user entry trying to persuade the user to use /banlist instead of
303 /mode #channel +b. That part of the message was a little
304 confusing, anyways.
305 (s367-set-by): New catalog entry. The user who set the ban and
306 the time of ban seem to be specific to only certain servers such
307 as freenode.
308
309 * erc-autoaway.el (erc-autoaway-idletimer): Doc fix.
310
311 * erc-backend.el (erc-server-process-alive): No need to check if
312 `erc-server-process' is bound.
313 (367): Use s367 or s367-set-by where appropriate.
314
315 * erc-compat.el: Fixed URL.
316
317 * erc-dcc.el: Updated copyright years. Added Usage section.
318 Changed supported Emacs version number from 21.3.50 to 22 in
319 Commentary.
320
321 * erc-ibuffer.el (erc-server-name, erc-target, erc-away): No need
322 to check if `erc-server-process' is bound.
323
324 * erc-nicklist.el: Added to the Commentary section an explanation
325 that `erc-nicklist-quit' should be called from within the nicklist
326 buffer. Set file coding to utf-8 so a contributor's name is
327 displayed correctly.
328 (erc-nicklist-icons-directory): Use customize type directory
329 instead of string.
330 (erc-nicklist-insert-contents): Set bbdb-nick to an empty string
331 if it wasn't found. This fixes a bug where an error would occur
332 when using `string=' on bbdb-nick if it was nil.
333
334 * erc-replace.el: Removed URL from file information since it
335 doesn't exist.
336
337 * erc-sound.el: Updated copyright years. Fixed Commentary and
338 added Usage section.
339 (define-erc-module): Add and remove `erc-ctcp-query-SOUND' to
340 `erc-ctcp-query-SOUND-hook' here. Removed the keybinding
341 definitions.
342 (erc-play-sound, erc-default-sound, erc-cmd-SOUND)
343 (erc-ctcp-query-SOUND): Doc fix.
344 (erc-play-command): Removed, not necessary anymore.
345 (erc-ctcp-query-SOUND-hook): Set to nil as default. Moved up
346 higher in code, added docstring.
347 (erc-play-sound): Use `play-sound-file'. It exists in GNU Emacs
348 as well since version 21 or earlier. Removed commented-out older
349 version of function.
350
351 * NEWS: Fixed formatting, added channel tracking change.
352
3532006-09-03 Diane Murray <disumu@x3y2z1.net>
354
355 * erc.el: M-x erc RET can now be used to start ERC.
356 (erc-open): Renamed from `erc'.
357 (erc-before-connect): Change erc-select to erc.
358 (erc): Renamed from `erc-select'. Use `erc-open'.
359 (erc-select): Defined as alias of `erc'.
360 (erc-ssl): Renamed from `erc-select-ssl'. Use `erc'.
361 (erc-select-ssl): Defined as alias of `erc-ssl'.
362 (erc-cmd-SERVER): Use `erc'.
363 (erc-query, erc-handle-irc-url): Use `erc-open'.
364
365 * erc-backend.el (erc-process-sentinel-1, JOIN): Use `erc-open'.
366
367 * erc-menu.el (erc-menu-definition): Use `erc'.
368
369 * erc-networks.el: Updated copyright years.
370 (erc-server-select): Use keyword arguments when calling `erc'.
371
372 * erc.texi (Getting Started, Connecting): Changed erc-select to
373 erc.
374
375 * NEWS: Added note about these changes.
376
3772006-08-20 Diane Murray <disumu@x3y2z1.net>
378
379 * erc-backend.el (erc-process-sentinel-1): Doc fix. Let
380 `erc-server-reconnect-p' check all condition cases.
381 (erc-server-reconnect-p): Moved rest of checks from
382 `erc-process-sentinel-1' to here. Now takes an argument, EVENT.
383
3842006-08-21 Diane Murray <disumu@x3y2z1.net>
385
386 * erc-track.el (erc-track-mode-line-mouse-face): New variable.
387 (erc-make-mode-line-buffer-name): Add help-echo and mouse-face
388 properties to channel name.
389
3902006-08-20 Michael Olson <mwolson@gnu.org>
391
392 * erc.el (erc-with-server-buffer): New macro that switches to the
393 current ERC server buffer and runs some code. If no server buffer
394 is available, return nil. This is a useful way to access
395 variables in the server buffer.
396 (erc-open-server-buffer-p): New function that returns non-nil if
397 the given buffer is an ERC server buffer that has an open IRC
398 process.
399
4002006-08-14 Diane Murray <disumu@x3y2z1.net>
401
402 * erc-menu.el: Updated copyright years. Removed EmacsWiki URL.
403 (erc-menu-definition): Name the menu "ERC" instead of "IRC" to
404 avoid confusion with rcirc and other clients.
405
406 * erc-backend.el (erc-server-banned): New variable.
407 (erc-server-connect): Set `erc-server-banned' to nil.
408 (erc-process-sentinel-1): Use `erc-server-reconnect-p'.
409 (erc-server-reconnect-p): New function. Return non-nil if the
410 user wants automatic reconnects and if the user has not been
411 banned from the server. This should fix a bug where ERC gets into
412 a loop trying to reconnect with no way to stop it when the user is
413 denied access to the server due to a server ban. It might also
414 help when Tor users are blocked from freenode if freenode servers
415 send the 465 message before disconnecting.
416 (465): Handle "banned from server" error notices.
417
4182006-08-13 Romain Francoise <romain@orebokech.com>
419
420 * erc-match.el (erc-log-matches-make-buffer): End `y-or-n-p'
421 prompt with a space.
422
4232006-08-11 Michael Olson <mwolson@gnu.org>
424
425 * erc-fill.el (erc-fill): Skip any initial empty lines so that we
426 avoid errors when inserting disconnect messages and other messages
427 that begin with newlines.
428
4292006-08-07 Michael Olson <mwolson@gnu.org>
430
431 * erc-backend.el (erc-process-sentinel-1): Use erc-display-message
432 in several places instead of inserting text.
433 (erc-process-sentinel): Move to the input-marker before removing
434 the prompt.
435
436 * erc.el (erc-port): Fix customization options.
437 (erc-display-message): Handle null type explicitly. Previously,
438 this was relying on a chance side-effect. Cosmetic indentation
439 tweak.
440 (english): Add 'finished and 'terminated entries to the catalog.
441 Add initial and terminal newlines to 'disconnected and
442 'disconnected-noreconnect entries. Avoid long lines.
443
4442006-08-06 Michael Olson <mwolson@gnu.org>
445
446 * erc-backend.el (erc-server-send-queue): Update from Circe
447 version of this function.
448
449 * erc.el (erc-arrange-session-in-multiple-windows): Fix bug with
450 multi-tty Emacs.
451 (erc-select-startup-file): Fix bug introduced by recent change.
452
4532006-08-05 Michael Olson <mwolson@gnu.org>
454
455 * erc-log.el (erc-log-standardize-name): New function that returns
456 a filename that is safe for use for a log file.
457 (erc-current-logfile): Use it.
458
459 * erc.el (erc-startup-file-list): Search in ~/.emacs.d first,
460 since that is a fairly standard directory.
461 (erc-select-startup-file): Re-write to use
462 convert-standard-filename, which will ensure that MS-DOS systems
463 look for the _ercrc.el file.
464
4652006-08-02 Michael Olson <mwolson@gnu.org>
466
467 * erc.el (erc-version-string): Release ERC 5.1.4.
468
469 * Makefile, NEWS, erc.texi: Update for the 5.1.4 release.
470
471 * erc.el (erc-active-buffer): Fix bug that caused messages to go
472 to the wrong buffer. Thanks to offby1 for the report.
473
474 * erc-backend.el (erc-coding-system-for-target): Handle case where
475 target is nil. Thanks to Kai Fan for the patch.
476
4772006-07-29 Michael Olson <mwolson@gnu.org>
478
479 * erc-log.el (erc-log-setup-logging): Don't offer to save the
480 buffer. It will be saved automatically killed. Thanks to Johan
481 Bockgård and Tassilo Horn for pointing this out.
482
4832006-07-27 Johan Bockgård <bojohan@users.sourceforge.net>
484
485 * erc.el (define-erc-module): Make find-function and find-variable
486 find the names constructed by `define-erc-module' in Emacs 22.
487
4882006-07-14 Michael Olson <mwolson@gnu.org>
489
490 * erc-log.el (log): Make sure that we enable logging on
491 already-opened buffers as well, in case the user toggles this
492 module after loading ERC. Also be sure to remove logging ability
493 from all ERC buffers when the module is disabled.
494 (erc-log-setup-logging): Set buffer-file-name to nil rather than
495 the empty string. This should fix some errors that occur when
496 quitting Emacs without first killing all ERC buffers.
497 (erc-log-disable-logging): New function that removes the logging
498 ability from the current buffer.
499
500 * erc-spelling.el (spelling): Use dolist and buffer-live-p.
501
5022006-07-12 Michael Olson <mwolson@gnu.org>
503
504 * erc-match.el (erc-log-matches): Bind inhibit-read-only rather
505 than call toggle-read-only.
506
507 * erc.el (erc-handle-irc-url): Move here from erc-goodies.el and
508 add autoload cookie.
509
5102006-07-09 Michael Olson <mwolson@gnu.org>
511
512 * erc.el (erc-version-string): Release ERC 5.1.3.
513
514 * erc.texi: Update for the 5.1.3 release.
515
516 * erc-autoaway.el (erc-autoaway-set-back): Fix bug after returning
517 from being set automatically away and current buffer is not an ERC
518 buffer.
519
520 * erc-identd.el: Fix compiler error.
521
522 * erc.texi (Development): Use @subheading instead of @subsection.
523 (Advanced Usage): Add menu.
524 (Connecting): Fully document how to connect to an IRC server.
525 (Options, Tips and Tricks, Sample Configuration): New unwritten
526 sections.
527
528 * erc.el (erc-server, erc-port, erc-nick, erc-nick-uniquifier)
529 (erc-user-full-name, erc-password): Docfixes and customization
530 interface tweaks.
531 (erc-try-new-nick-p): Rename from
532 `erc-manual-set-nick-on-bad-nick-p' and invert meaning.
533 (erc-nickname-in-use): Use `erc-try-new-nick-p'. Check the length
534 of `erc-nick-uniquifier', in case someone wants multiple
535 characters.
536 (erc-compute-server, erc-compute-nick, erc-compute-full-name)
537 (erc-compute-port): Docfixes.
538
539 * erc-log.el (log): Move all add-hook calls here, rather than
540 executing them immediately, and also cause them to be un-hooked
541 when the module is removed.
542 (erc-save-buffer-on-part): Move next to
543 `erc-save-queries-on-quit'.
544 (erc-save-buffer-on-quit, erc-save-queries-on-quit): Default to t.
545 (erc-log-write-after-send, erc-log-write-after-insert): Default to
546 nil. This makes things fast, but reasonably failsafe, by default.
547
5482006-07-08 Michael Olson <mwolson@gnu.org>
549
550 * erc-log.el (erc-log-insert-log-on-open): Make this nil by
551 default, since most IRC clients don't do this.
552 (erc-log-write-after-send): New option that determines whether the
553 log file will be written to after every sent message.
554 (erc-log-write-after-insert): New option that determines whether
555 the log file will be written to when new text is added to a logged
556 ERC buffer.
557 (log): Use the aforementioned options.
558
559 * erc.texi (Modules): Document the "completion" module.
560
561 * erc-pcomplete.el (pcomplete-erc-nicks): Make sure that we don't
562 have a nil element in the list when ignore-self is non-nil.
563
5642006-07-05 Michael Olson <mwolson@gnu.org>
565
566 * erc.el (erc-modules): Add the `page' module to the list.
567
568 * erc.texi (Modules): Add entries for `list' and `page' modules.
569 Change "spell" to "spelling".
570 (History): Use past tense throughout.
571
5722006-07-02 Michael Olson <mwolson@gnu.org>
573
574 * erc-backend.el (erc-call-hooks): Fix (stringp nil) error that
575 can happen when doing /PART.
576
577 * erc.el (erc-quit-reason-various-alist)
578 (erc-part-reason-various-alist): In the example, use "^$" as an
579 example, since "" matches anything.
580 (erc-quit-reason-various, erc-part-reason-various): If no argument
581 is given, and no matches are found, use our default reason instead
582 of "nil".
583
5842006-06-30 Michael Olson <mwolson@gnu.org>
585
586 * erc.texi (Modules): Mention identd.
587 (Releases): Update mailing list address and download location.
588 (Development): Refactor. Provide updated directions for Arch.
589 Make URLs clickable.
590 (Keystroke Summary): Typo fix. Use more Texinfo syntax.
591 (Getting Started): Give simpler example. We do not need to
592 explicitly load every module.
593 (History): Update.
594
595 * erc.el (erc-version-modules): Remove, since we do not use this
596 function anymore.
597 (erc-latest-version, erc-ediff-latest-version): Remove, since this
598 was only useful back when ERC consisted of one file.
599 (erc-modules): Add line for identd.
600 (erc-get-channel-mode-from-keypress): Typo fix.
601
602 * erc-imenu.el: Remove unnecessary lines in header.
603
604 * erc-goodies.el (erc-handle-irc-url): Docfix.
605
606 * erc-identd.el: Define an ERC module for this.
607 (erc-identd-start): Don't create a process buffer if possible.
608 Otherwise, use conventional hidden names for process buffers.
609
6102006-06-29 Michael Olson <mwolson@gnu.org>
611
612 * erc-backend.el (erc-coding-system-for-target): Match
613 case-insensitively. Use a pattern match instead of `assoc', as
614 per the documentation for `erc-encoding-coding-alist'.
615
616 * erc-track.el (erc-track-shorten-aggressively): Fix typo.
617
6182006-06-27 Michael Olson <mwolson@gnu.org>
619
620 * erc.el: Update maintainer information and URLs.
621
6222006-06-14 Michael Olson <mwolson@gnu.org>
623
624 * erc.el (erc-active-buffer): If the active buffer has been
625 deleted, default to the server buffer.
626 (erc-toggle-flood-control): When the user hits C-c C-f, make flood
627 control really toggle, not unconditionally turn off.
628
6292006-06-12 Michael Olson <mwolson@gnu.org>
630
631 * NEWS: Add items since the 5.1.2 release.
632
633 * erc-autoaway.el (erc-autoaway-caused-away): New variable that
634 indicates whether the current away status was caused by this
635 module.
636 (erc-autoaway-set-back): Only set back if this module set the user
637 away.
638 (erc-autoaway-set-away): Update `erc-autoaway-caused-away'.
639 (erc-autoaway-reset-indicators): New function that resets some
640 indicators when the user is no longer away.
641 (autoaway): Add the above function to the 305 hook.
642
6432006-06-05 Romain Francoise <romain@orebokech.com>
644
645 * erc.texi (History): Fix various typos.
646
6472006-06-04 Michael Olson <mwolson@gnu.org>
648
649 * erc-autoaway.el (erc-autoaway-idle-method): Move after the
650 definition of the autoaway module.
651 (autoaway): Don't do anything if erc-autoaway-idle-method is
652 unbound. This prevents an error on startup.
653
6542006-06-03 Michael Olson <mwolson@gnu.org>
655
656 * erc-autoaway.el: Thanks to Mark Plaksin for the ideas and patch.
657 (erc-autoaway-idle-method): Renamed from
658 `erc-autoaway-use-emacs-idle'. We have more than two choices for
659 how to do this, so it's best to make this take symbol values.
660 Improve documentation. Remove warning against Emacs idle-time;
661 the point is moot now that we get user idle time via a different
662 method. Make sure we disable and re-enable the module when
663 changing this value.
664 (autoaway): Conditionalize on the above option. If using the idle
665 timer or user idle methods, don't add anything to the
666 send-completed or server-001 hooks, since it is unnecessary.
667 (erc-autoaway-reestablish-idletimer, erc-autoaway-message):
668 Docfix.
669 (erc-autoaway-idle-seconds): Use erc-autoaway-idle-method.
670 (erc-autoaway-reset-idle-irc): Renamed from
671 `erc-autoaway-reset-idle'. Don't pass line to
672 `erc-autoaway-set-away', since it is not used.
673 (erc-autoaway-reset-idle-user): New function that resets the idle
674 state for user idle time.
675 (erc-autoaway-set-back): Remove line argument, since it is not
676 used.
677
6782006-06-01 Michael Olson <mwolson@gnu.org>
679
680 * erc.el (erc-buffer-filter): Make sure all buffers returned from
681 this are live.
682
6832006-05-01 Edward O'Connor <ted@oconnor.cx>
684
685 * erc-goodies.el (erc-handle-irc-url): New function, suitable as
686 a value for `url-irc-function'.
687
6882006-04-18 Diane Murray <disumu@x3y2z1.net>
689
690 * erc-pcomplete.el (pcomplete-erc-nicks): Added new optional
691 argument IGNORE-SELF. If this is non-nil, don't return the user's
692 current nickname. Doc fix.
693 (pcomplete/erc-mode/complete-command): Don't complete the current
694 nickname.
695
6962006-04-05 Diane Murray <disumu@x3y2z1.net>
697
698 * erc.el (erc-cmd-SV): Removed the exclamation point. Show the
699 build date as it's shown in `emacs-version'.
700
701 * erc-capab.el (erc-capab-identify-add-prefix): Insert the prefix
702 with the same face property as the previous character.
703
7042006-04-02 Michael Olson <mwolson@gnu.org>
705
706 * erc-backend.el, erc-ezbounce.el, erc-join.el, erc-netsplit.el,
707 erc.el: Make sure to include a newline inside of negated classes,
708 so that a newline is not matched.
709
7102006-04-01 Michael Olson <mwolson@gnu.org>
711
712 * erc-backend.el (erc-server-connect-function): Don't try to
713 detect the existence of the `open-network-stream-nowait' function,
714 since I can't find it in Emacs21, XEmacs21, or Emacs22.
715
7162006-03-26 Michael Olson <mwolson@gnu.org>
717
718 * erc.el (erc-header-line): New face that will be used to colorize
719 the text of the header-line, provided that
720 `erc-header-line-face-method' is non-nil.
721 (erc-prompt-face): Fix formatting.
722 (erc-header-line-face-method): New option that determines the
723 method used for colorizing header-line text. This may be a
724 function, nil, or non-nil.
725 (erc-update-mode-line-buffer): Use the aforementioned option and
726 face to colorize the header-line text, if that is what the user
727 wants.
728 (erc-send-input): If flood control is not activated, don't split
729 the input line.
730
7312006-03-25 Michael Olson <mwolson@gnu.org>
732
733 * erc.el (erc-cmd-QUOTE): Install patch from Aravind Gottipati
734 that fixes the case where there is no leading whitespace. Only
735 remove the first space character, though.
736
737 * erc-identd.el (erc-identd-start): Fix a bug by making sure that
738 erc-identd-process is set properly.
739 (erc-identd-start, erc-identd-stop): Add autoload cookies.
740 (erc-identd-start): Pass :host parameter so this works with Emacs
741 22.
742
7432006-03-09 Diane Murray <disumu@x3y2z1.net>
744
745 * erc-button.el (erc-button-keymap): Use <backtab> rather than
746 <C-tab> for `erc-button-previous' as it is a more standard key
747 binding for this type of function.
748
7492006-02-28 Diane Murray <disumu@x3y2z1.net>
750
751 * erc-capab.el: Removed things that were accidentally committed on
752 2006-02-20. Removed Todo section.
753 (erc-capab-unidentified): Removed.
754
7552006-02-26 Michael Olson <mwolson@gnu.org>
756
757 * erc-capab.el: Use (eval-when-compile (require 'cl)).
758 (erc-capab-unidentified): Fix compiler warning by specifying
759 group.
760
7612006-02-20 Diane Murray <disumu@x3y2z1.net>
762
763 * erc-capab.el (erc-capab-send-identify-messages): Fixed comment
764 to explain thoughts better. `erc-server-parameters' is an
765 associated list when it's set, not a string.
766
7672006-02-19 Michael Olson <mwolson@gnu.org>
768
769 * erc-capab.el (erc-capab-send-identify-messages): Make sure some
770 parameters are strings before using them. Thanks to Alejandro
771 Benitez for the report.
772
773 * erc.el (erc-version-string): Release ERC 5.1.2.
774
7752006-02-19 Diane Murray <disumu@x3y2z1.net>
776
777 * erc-button.el (erc-button-keymap): Bind `erc-button-previous' to
778 <C-tab>.
779 (erc-button-previous): New function.
780
7812006-02-15 Michael Olson <mwolson@gnu.org>
782
783 * NEWS: Add category for ERC 5.2.
784
785 * erc.el (erc): Move to the end of the buffer when a continued
786 session is detected. Thanks to e1f and indio for the report and
787 testing a potential fix.
788
7892006-02-14 Michael Olson <mwolson@gnu.org>
790
791 * debian/changelog: Prepare a new Debian package.
792
793 * Makefile (debprepare): New rule that creates an ERC snapshot
794 directory for use in both new Debian releases and revisions for
795 Debian packages.
796 (debrelease, debrevision-mwolson): Use debprepare.
797
798 * NEWS: Bring up-to-date.
799
800 * erc-stamp.el (erc-insert-timestamp-right): For now, put
801 timestamps before rather than after erc-fill-column when
802 erc-timestamp-right-column is nil. This way we won't surprise
803 anyone unpleasantly, or so it is hoped.
804
8052006-02-13 Michael Olson <mwolson@gnu.org>
806
807 * erc-dcc.el: Use (eval-when-compile (require 'cl)).
808
8092006-02-12 Michael Olson <mwolson@gnu.org>
810
811 * erc-autoaway.el, erc-dcc.el, erc-ezbounce.el, erc-fill.el
812 * erc-goodies.el, erc-hecomplete.el, erc-ibuffer.el, erc-identd.el
813 * erc-imenu.el, erc-join.el, erc-lang.el, erc-list.el, erc-log.el
814 * erc-match.el, erc-menu.el, erc-netsplit.el, erc-networks.el
815 * erc-notify.el, erc-page.el, erc-pcomplete.el, erc-replace.el
816 * erc-ring.el, erc-services.el, erc-sound.el, erc-speedbar.el
817 * erc-spelling.el, erc-track.el, erc-truncate.el, erc-xdcc.el:
818 Add 2006 to copyright years, to comply with the changed guidelines.
819
8202006-02-11 Michael Olson <mwolson@gnu.org>
821
822 * erc.el (erc-update-modules): Handle erc-capab-identify
823 correctly. Make some requirements shorter, so that it's easier to
824 see why they are needed.
825
826 * erc-capab.el: Add autoload cookie for capab-identify.
827 (erc-capab-send-identify-messages, erc-capab-identify-activate):
828 Minor whitespace fix in code.
829
830 * erc-stamp.el (erc-timestamp-use-align-to): Renamed from
831 `erc-timestamp-right-align-by-pixel'. Set the default based on
832 whether we are in Emacs 22, and using X. Improve documentation.
833 (erc-insert-aligned): Remove calculation of offset, since
834 :align-to pos works after all. Unlike the previous solution, this
835 one works when erc-stamp.el is compiled.
836 (erc-insert-timestamp-right): Don't add length of string, and then
837 later remove its displayed width. This puts timestamps after
838 erc-fill-column when erc-timestamp-right-column is nil, rather
839 than before it. It also fixes a subtle bug. Remove use of
840 `current-window', since there is no variable by that name in
841 Emacs21, Emacs22, or XEmacs21 beta. Check to see whether
842 `erc-fill-column' is non-nil before using it.
843
8442006-02-11 Diane Murray <disumu@x3y2z1.net>
845
846 * erc-list.el: Define `list' module which sets the alias
847 `erc-cmd-LIST' to `erc-list-channels' when enabled and
848 `erc-list-channels-simple' when disabled.
849 (erc-list-channels): Was `erc-cmd-LIST', renamed.
850 (erc-list-channels-simple): New function.
851
852 * erc.el (erc-modules): Added `list' to enabled modules. Changed
853 `capab-identify' description. Moved customization options left in
854 source code.
855
856 * erc-menu.el (erc-menu-definition): Use `erc-list-channels'.
857
858 * erc-capab.el: Put a little more detail into Usage section.
859 (define-erc-module): Run `erc-capab-identify-setup' in all open
860 server buffers when enabling.
861 (erc-capab-identify-setup): Make PROC and PARSED optional
862 arguments.
863 (erc-capab-identify-add-prefix): Simplified nickname regexp. This
864 should now also match nicknames that are formatted differently
865 than the default.
866
867 * erc-spelling.el (define-erc-module): Make sure there's a buffer
868 before calling `with-current-buffer'.
869
8702006-02-10 Michael Olson <mwolson@gnu.org>
871
872 * Makefile (debbuild): Split from debrelease.
873 (debrevision-mwolson): New rule that causes a Debian revision to
874 be built.
875
876 * erc.el (erc-migrate-modules): Use a better algorithm. Thanks to
877 Johan Bockgård.
878 (erc-modules): Change use of 'pcomplete to 'completion.
879
8802006-02-09 Diane Murray <disumu@x3y2z1.net>
881
882 * erc.el (erc-get-parsed-vector, erc-get-parsed-vector-nick)
883 * erc-capab.el: Require erc.
884 (erc-capab-send-identify-messages): Use `erc-server-send'.
885 (erc-capab-identify-remove/set-identified-flag): Use 1 and 0 as
886 the flags so we can also check whether the `erc-identified' text
887 property is there at all.
888 (erc-capab-identify-add-prefix): Use `erc-capab-find-parsed'.
889 This fixes a bug where the prefix wasn't inserted when timestamps
890 are inserted on the right. Tweaked nickname regexp.
891 (erc-capab-find-parsed): New function.
892 (erc-capab-get-unidentified-nickname): Updated to check for 0
893 flag. Only get nickname if there's a nickuserhost associated with
894 this message.
895
896 * erc-capab.el: New file. Adds the new module
897 `erc-capab-identify', which allows flagging of unidentified users
898 on servers running an ircd based on dancer - irc.freenode.net, for
899 example.
900
901 * erc.el (erc-modules): Added `capab-identify' to options.
902 (erc-get-parsed-vector, erc-get-parsed-vector-nick)
903 (erc-get-parsed-vector-type): Moved here from erc-match.el.
904
905 * erc-match.el (erc-get-parsed-vector, erc-get-parsed-vector-nick)
906 (erc-get-parsed-vector-type): Moved these functions to erc.el
907 since they can be useful outside of the text matching module.
908
909 * NEWS: Added erc-capab.el.
910
911 * erc-dcc.el, erc-stamp.el, erc-xdcc.el: Changed "Emacs IRC Client"
912 to "ERC".
913
9142006-02-07 Michael Olson <mwolson@gnu.org>
915
916 * ChangeLog.01, ChangeLog.02, ChangeLog.03, ChangeLog.04,
917 ChangeLog.05: Rename from ChangeLog.NNNN in order to disambiguate
918 the filenames in DOS.
919
920 * erc-goodies.el: Comment fix.
921
922 * erc-hecomplete.el: Rename from erc-complete.el. Update
923 commentary. Use define-erc-module so that it's possible to
924 actually use this.
925 (erc-hecomplete): Rename function from `erc-complete'.
926 (erc-hecomplete): Rename group from `erc-old-complete'. Docfix.
927
928 * erc-join.el: Rename from erc-autojoin.el.
929
930 * erc-networks.el: Rename from erc-nets.el.
931
932 * erc-services.el: Rename from erc-nickserv.el.
933
934 * erc-stamp.el (erc-insert-aligned): Don't take 3rd argument. Use
935 the simpler `indent-to' function when
936 `erc-timestamp-right-align-by-pixel' is nil.
937 (erc-insert-timestamp-right): If the timestamp goes on the
938 following line, don't add timestamp properties to the spaces in
939 front of it.
940
941 * erc.el (erc-migrate-modules): New function that eases migration
942 of module names.
943 (erc-modules): Call erc-migrate-modules in the :get accessor.
944 (erc-modules, erc-update-modules): Update for new modules names.
945 (erc-cmd-SMV): Remove, since this does not give useful output due
946 to the version strings being removed from ERC modules.
947
9482006-02-05 Michael Olson <mwolson@gnu.org>
949
950 * erc-spelling.el (erc-spelling-init): If
951 `erc-spelling-dictionaries' is nil, do not set
952 ispell-local-dictionary. Before, it was being set to nil, which
953 was causing a long delay while the ispell process restarted.
954 (erc-spelling-unhighlight-word): New function that removes
955 flyspell properties from a spell-checked word.
956 (erc-spelling-flyspell-verify): Don't spell-check nicks or words
957 that have '/' before them.
958
9592006-02-04 Michael Olson <mwolson@gnu.org>
960
961 * erc-autojoin.el: Use (eval-when-compile (require 'cl)).
962
963 * erc-complete.el (erc-nick-completion-exclude-myself)
964 (erc-try-complete-nick): Use better function for getting list of
965 channel users.
966
967 * erc-goodies.el: Docfix.
968
969 * erc-stamp.el: Use new arch tagline, since the other one wasn't
970 being treated properly.
971
972 * erc.el (erc-version-string): Release ERC 5.1.1.
973
9742006-02-03 Zhang Wei <id.brep@gmail.com>
975
976 * erc.el (erc-version-string): Don't hard-code Emacs version.
977 (erc-version): Use emacs-version.
978
9792006-01-31 Michael Olson <mwolson@gnu.org>
980
981 * erc-stamp.el: Update copyright years.
982
9832006-01-30 Simon Josefsson <jas@extundo.com>
984
985 * erc.el (erc-open-ssl-stream): Use tls.el.
986
9872006-01-30 Michael Olson <mwolson@gnu.org>
988
989 * erc-stamp.el (erc-timestamp-right-align-by-pixel): New option
990 that determines whether to use pixel values to align right
991 timestamps. The default is not to do so, since it only works with
992 Emacs22 on X, and even then some people have trouble.
993 (erc-insert-aligned): Use `erc-timestamp-right-align-by-pixel'.
994
9952006-01-29 Michael Olson <mwolson@gnu.org>
996
997 * ChangeLog, ChangeLog.2005, ChangeLog.2004, ChangeLog.2003,
998 ChangeLog.2002, ChangeLog.2001: Add "See ChangeLog.NNNN" line for
999 earlier changes. Use utf-8 encoding. Fix some accent typos.
1000
1001 * erc-speedbar.el (erc-speedbar-buttons): Fix reference to free
1002 variable.
1003 (erc-speedbar-goto-buffer): Fix compiler warning.
1004
1005 * erc-ibuffer.el: Use `define-ibuffer-filter' instead of
1006 `ibuffer-degine-limiter'. Use `define-ibuffer-column' instead of
1007 `ibuffer-define-column'. Require 'ibuf-ext so that the macros
1008 work without compiler warnings.
1009
1010 * man/erc.texi (Obtaining ERC, Installation): Note that these
1011 sections may be skipped if using the version of ERC that comes
1012 with Emacs.
1013
10142006-01-29 Edward O'Connor <ted@oconnor.cx>
1015
1016 * erc-viper.el: Remove. Now that ERC is included in Emacs, these
1017 work-arounds live in Viper itself.
1018
10192006-01-28 Michael Olson <mwolson@gnu.org>
1020
1021 * erc-*.el, erc.texi, NEWS: Add Arch taglines as per Emacs
1022 guidelines.
1023
1024 * erc-*.el: Space out copyright years like the rest of Emacs. Use
1025 the Emacs copyright statement. Refer to ourselves as ERC rather
1026 than "Emacs IRC Client", since there are now several IRC clients
1027 for Emacs.
1028
1029 * erc-compat.el (erc-emacs-build-time): Define as a variable.
1030
1031 * erc-log.el (erc-log-setup-logging): Use write-file-functions.
1032
1033 * erc-ibuffer.el: Require 'erc.
1034
1035 * erc-stamp.el (erc-insert-aligned): Only use the special text
1036 property when window-system is X.
1037
1038 * erc.texi: Adapt for inclusion in Emacs.
1039
10402006-01-28 Johan Bockgård <bojohan@users.sourceforge.net>
1041
1042 * erc.el (erc-format-message): More `cl' breakage; don't use
1043 `oddp'.
1044
10452006-01-27 Michael Olson <mwolson@gnu.org>
1046
1047 * debian/changelog: Update for new release.
1048
1049 * debian/control (Description): Update.
1050
1051 * debian/rules: Concatenate ChangeLog for 2005.
1052
1053 * Makefile (MISC): Include ChangeLog.2005 and erc.texi.
1054 (debrelease, release): Copy images directory.
1055
1056 * NEWS: Spelling fixes. Add items for recent changes.
1057
1058 * erc.el (erc): Move call to erc-update-modules before the call to
1059 erc-mode. This should fix a timestamp display issue.
1060 (erc-version-string): Release ERC 5.1.
1061
10622006-01-26 Michael Olson <mwolson@gnu.org>
1063
1064 * erc-stamp.el (erc-insert-aligned): New function that inserts
1065 text in an perfectly-aligned way relative to the right margin. It
1066 only works well with Emacs22. A sane fallback is provided for
1067 other versions of Emacs.
1068 (erc-insert-timestamp-right): Use the new function.
1069
10702006-01-25 Edward O'Connor <ted@oconnor.cx>
1071
1072 * erc.el (erc-modules): Ensure that `erc-button-mode' gets enabled
1073 before `erc-match-mode'.
1074
1075 * erc-match.el (match): Append `erc-match-message' to
1076 `erc-insert-modify-hook'.
1077
10782006-01-25 Michael Olson <mwolson@gnu.org>
1079
1080 * FOR-RELEASE: Mark last release requirement as done.
1081
1082 * Makefile (realclean, distclean): Remove docs.
1083
1084 * erc.texi: Take care of all pre-5.1 items.
1085
1086 * erc-backend.el (erc-server-send, erc-server-send-queue): Wrap
1087 `process-send-string' in `condition-case' to avoid an error when
1088 quitting ERC.
1089
1090 * erc-stamp.el (erc-insert-timestamp-right): Try to deal with
1091 variable-width characters in the timestamp and on the same line.
1092 The latter is a kludge, but it seems to work with most of the
1093 input I've thrown at it so far. It's certainly better than going
1094 past the end of line consistently when we have variable-width
1095 characters on the same line. When `erc-timestamp-intangible' is
1096 non-nil, add intangible properties to the whitespace as well, so
1097 that hitting <end> does what you'd expect.
1098
1099 * erc.el (erc-flood-protect, erc-toggle-flood-control): Update
1100 this to only use boolean values for `erc-flood-protect'. Update
1101 documentation.
1102 (erc-cmd-QUIT): Set the active buffer to be the server buffer, so
1103 that any QUIT-related messages go there.
1104 (erc): Try to be more clever about re-using channel buffers when
1105 automatically re-connecting. Thanks to e1f for noticing.
1106
11072006-01-23 Michael Olson <mwolson@gnu.org>
1108
1109 * ChangeLog.2005: Remove erroneous line.
1110
1111 * FOR-RELEASE: Make that the Makefile tweaking is complete.
1112 (NEWS): Mark as done.
1113
1114 * Makefile (MANUAL): New option indicating the name of the manual.
1115 (PREFIX, ELISPDIR, INFODIR): New options that specify the
1116 directories to install lisp code and info manuals to. PREFIX is
1117 used only by ELISPDIR and INFODIR.
1118 (all): Call `lisp' and create the manual.
1119 (lisp): Compile lisp code.
1120 (%.info, %.html): New rules that make Info files and HTML files,
1121 respectively, from a TexInfo source.
1122 (doc): Create both the Info and HTML versions of the manual. This
1123 is for the user -- we never call it automatically.
1124 (install-info): Install Info files.
1125 (install-bin): Install compiled and source Lisp files.
1126 (todo): Remove, since it seems pointless.
1127
1128 * NEWS: Update.
1129
1130 * README: Add Installation instructions. Tweak layout.
1131
1132 * erc.texi: Work on some pre-5.1 items.
1133
1134 * erc-stamp.el, erc-track.el: Move some functions and options in
1135 order to get rid of a few compiler warnings.
1136
1137 * erc.el (erc-modules): Enable readonly by default. This will
1138 prevent new users from accidentally removing old messages, which
1139 could be disconcerting. Also enable stamp by default, since
1140 timestamps are a fairly standard feature among IRC clients.
1141
1142 * erc-button.el: Munge whitespace.
1143
1144 * erc-identd.el (erc-identd-start): Instead of throwing an error,
1145 just try to use the obsolete function.
1146
11472006-01-22 Michael Olson <mwolson@gnu.org>
1148
1149 * erc-backend.el (erc-decode-string-from-target): Make sure that
1150 we have a string as an argument. If not, coerce it to the empty
1151 string. Hopefully, this will work painlessly around an edge case
1152 related to quitting ERC around the same time a message comes in.
1153
11542006-01-22 Johan Bockgård <bojohan@users.sourceforge.net>
1155
1156 * erc-track.el: Use `(eval-when-compile (require 'cl))' (for
1157 `case'). Doc fixes.
1158 (erc-find-parsed-property): Simplify.
1159 (erc-track-get-active-buffer): Fix logic. Simplify.
1160 (erc-track-switch-buffer): Remove unused variable `dir'. Simplify.
1161
1162 * erc-speak.el: Doc fixes.
1163 (erc-speak-region): `propertize' --> `erc-propertize'.
1164
1165 * erc-dcc.el (erc-dcc-chat-parse-output): `propertize' -->
1166 `erc-propertize'.
1167
1168 * erc-button.el (erc-button-add-button): Take erc-fill-prefix into
1169 account when wrapping URLs.
1170
1171 * erc-bbdb.el (erc-bbdb-elide-display): Doc fix.
1172
1173 * erc-backend.el (define-erc-response-handler): Doc fix.
1174
11752006-01-22 Michael Olson <mwolson@gnu.org>
1176
1177 * erc.el (erc-update-modules): Use `require' instead of `load',
1178 but prevent it from causing errors, in order to preserve the
1179 previous behavior.
1180
11812006-01-21 Michael Olson <mwolson@gnu.org>
1182
1183 * FOR-RELEASE (Source): Mark cl task as done.
1184 352
1185 * Makefile (erc-auto.el): Call erc-generate-autoloads rather than 353See ChangeLog.06 for earlier changes.
1186 generate-autoloads.
1187 (erc-auto.el, %.elc): Don't show command, just its output.
1188 354
1189 * NEWS: Add items from 2005-01-01 to 2005-08-13. 355 Copyright (C) 2007 Free Software Foundation, Inc.
1190
1191 * debian/copyright (Copyright): Update.
1192
1193 * erc-auto.in (erc-generate-autoloads): Rename from
1194 generate-autoloads.
1195
1196 * erc.el, erc-autoaway.el, erc-backend.el: Use
1197 erc-server-process-alive instead of erc-process-alive.
1198
1199 * erc.el, erc-backend.el, erc-ezbounce.el, erc-list.el,
1200 erc-log.el, erc-match.el, erc-nets.el, erc-netsplit.el,
1201 erc-nicklist.el, erc-nickserv.el, erc-notify.el, erc-pcomplete.el:
1202 Use (eval-when-compile (require 'cl)), so that compilation doesn't
1203 fail.
1204
1205 * erc-fill.el, erc-truncate.el: Whitespace munging.
1206
1207 * erc.el: Update copyright notice. Remove eval-after-load code.
1208 (erc-with-buffer): Docfix.
1209 (erc-once-with-server-event, erc-once-with-server-event-global)
1210 (erc-with-buffer, erc-with-all-buffers-of-server): Use erc-gensym
1211 instead of gensym.
1212 (erc-banlist-update): Use erc-delete-if instead of delete-if.
1213 (erc): Call `erc-update-modules' here.
1214
1215 * erc-backend.el: Require 'erc-compat to minimize compiler
1216 warnings.
1217 (erc-decode-parsed-server-response): Docfix.
1218 (erc-server-process-alive): Move here from erc.el and rename from
1219 `erc-process-alive'.
1220 (erc-server-send, erc-remove-channel-users): Make sure process is
1221 alive before sending data to it.
1222
1223 * erc-bbdb.el: Update copyright years.
1224 (erc-bbdb-whois): Remove overexuberant comment.
1225
1226 * erc-button.el: Require erc-fill, since we make liberal use of
1227 `erc-fill-column'.
1228
1229 * erc-compat.el (erc-const-expr-p, erc-list*, erc-assert): New
1230 functions, the latter of which provides an `assert' equivalent.
1231 (erc-remove-if-not): New function that provides a simple
1232 implementation of `remove-if-not'.
1233 (erc-gensym): New function that provides a simple implementation
1234 of `gensym'.
1235 (erc-delete-if): New function that provides a simple
1236 implementation of `delete-if'.
1237 (erc-member-if): New function that provides a simple
1238 implementation of `member-if'.
1239 (field-end): Remove this, since it is unused, and later versions
1240 of XEmacs have this function already.
1241 (erc-function-arglist): Moved here from erc.el.
1242 (erc-delete-dups): New compatibility function for dealing with
1243 XEmacs.
1244 (erc-subseq): New function copied from cl-extra.el.
1245
1246 * erc-dcc.el: Require pcomplete during compilation to avoid
1247 compiler warnings.
1248 (erc-unpack-int, erc-dcc-send-filter)
1249 (erc-dcc-get-filter): Use erc-assert instead of assert.
1250 (pcomplete/erc-mode/DCC): Use erc-remove-if-not instead of
1251 remove-if-not.
1252
1253 * erc-match.el (erc-log-matches): Fix compiler warning.
1254
1255 * erc-nicklist.el: Update copyright notice.
1256 (erc-nicklist-menu): Change use of caadr to (car (cadr ...)).
1257 (erc-nicklist-bitlbee-connected-p): Remove.
1258 (erc-nicklist-insert-medium-name-or-icon): Accept channel
1259 argument. Use it to determine whether we are on bitlbee. Now
1260 that bitlbee names its channel "&bitlbee", this is trivial.
1261 (erc-nicklist-insert-contents): Pass channel as specified above.
1262 Don't try to determine whether we are on bitlbee here.
1263 (erc-nicklist-channel-users-info): Use erc-remove-if-not instead
1264 of remove-if-not.
1265 (erc-nicklist-search-for-nick): Use erc-member-if instead of
1266 member-if.
1267
1268 * erc-notify.el (erc-notify-QUIT): Use erc-delete-if with a
1269 partially-evaluated lambda expression instead of `delete' and
1270 `find'.
1271
1272 * erc-track.el: Use erc-assert.
1273 (erc-track-modified-channels): Remove use of `return'.
1274 (erc-track-modified-channels): Use `cadr' instead of `second',
1275 since otherwise we would need yet another eval-when-compile line.
1276
12772006-01-19 Michael Olson <mwolson@gnu.org>
1278
1279 * erc-backend.el (erc-process-sentinel-1): Remove attempt to
1280 detect SIGPIPE, since it doesn't work.
1281
12822006-01-10 Diane Murray <disumu@x3y2z1.net>
1283
1284 * erc-spelling.el: Updated copyright years.
1285 (define-erc-module): Enable/disable `flyspell-mode' for all open
1286 ERC buffers as well.
1287 (erc-spelling-dictionaries): Reworded customize description.
1288
1289 * erc.el (erc-command-symbol): New function.
1290 (erc-extract-command-from-line): Use `erc-command-symbol'. This
1291 fixes a bug where "Symbol's function definition is void:
1292 erc-cmd-LIST" would be shown after typing /list at the prompt (the
1293 command was interned because erc-menu.el uses it and is enabled by
1294 default whereas erc-list.el is not).
1295
1296 * NEWS: Started a list of renamed variables.
1297
1298 * erc.el: Reworded the message sent when defining variable
1299 aliases.
1300 (erc-command-indicator-face): Doc fix.
1301 (erc-modules): Enable the match module by default which makes
1302 current nickname highlighting on as the default.
1303
1304 * erc-button.el: Updated copyright years.
1305 (erc-button): New face.
1306 (erc-button-face): Use `erc-button'.
1307 (erc-button-nickname-face): New customizable variable.
1308 (erc-button-add-nickname-buttons, erc-button-add-buttons-1): Send
1309 new argument to `erc-button-add-button'.
1310 (erc-button-add-button): Doc fix. Added new argument to function
1311 definition, NICK-P. If it's a nickname, use
1312 `erc-button-nickname-face', otherwise use `erc-button-face'. This
1313 makes channel tracking and buttons work better together when
1314 `erc-button-buttonize-nicks' is enabled, since there is a nickname
1315 on just about every line.
1316
1317 * erc-track.el (erc-track-use-faces): Doc fix.
1318 (erc-track-faces-priority-list): Added `erc-button' to list.
1319 (erc-track-priority-faces-only): Doc fix.
1320
13212006-01-09 Diane Murray <disumu@x3y2z1.net>
1322
1323 * erc-button.el (erc-button-url-regexp): Use `concat' so the
1324 regexp is not one long line.
1325 (erc-button-alist): Fixed so that customizing works correctly.
1326 Reorganized. Removed lambda functions with more than two lines.
1327 Doc fix.
1328 (erc-button-describe-symbol, erc-button-beats-to-time): New
1329 functions. Moved from `erc-button-alist'.
1330
13312006-01-07 Michael Olson <mwolson@gnu.org>
1332
1333 * erc-backend.el (erc-process-sentinel-1): Don't try to re-open a
1334 process if a SIGPIPE occurs. This happens when a new message
1335 comes in at the same time a /quit is requested.
1336 (erc-process-sentinel): Use string-match rather than string= to do
1337 these comparisons. Matching literal newlines makes me nervous.
1338
1339 * erc-track.el (erc-track-remove-from-mode-line): Handle case
1340 where global-mode-string is not a list. Emacs22 permits this.
1341
1342
1343See ChangeLog.05 for earlier changes.
1344
1345 Copyright (C) 2006, 2007 Free Software Foundation, Inc.
1346 356
1347 This file is part of GNU Emacs. 357 This file is part of GNU Emacs.
1348 358
@@ -1366,4 +376,4 @@ See ChangeLog.05 for earlier changes.
1366;; add-log-time-zone-rule: t 376;; add-log-time-zone-rule: t
1367;; End: 377;; End:
1368 378
1369;; arch-tag: 865a75f6-2bcb-46df-bf0c-b514dadf688a 379;; arch-tag: 3369b6e5-96b1-4b32-96cd-9a905c747496
diff --git a/lisp/erc/ChangeLog.06 b/lisp/erc/ChangeLog.06
new file mode 100644
index 00000000000..f7d891cb5f6
--- /dev/null
+++ b/lisp/erc/ChangeLog.06
@@ -0,0 +1,1457 @@
12006-12-28 Michael Olson <mwolson@gnu.org>
2
3 * erc-list.el: Change header to mention that this is part of ERC,
4 rather than GNU Emacs.
5
6 * erc-networks.el (erc-server-alist): Add Ars OpenIRC and
7 LinuxChix networks. Thanks to Angelina Carlton for mentioning
8 them. Properly escape periods in Konfido.Net and Kewl.Org.
9 (erc-networks-alist): Add entries for Ars and LinuxChix, though
10 the latter does not actually provide an announced network name.
11
12 * erc-services.el (erc-nickserv-identify-mode): Add 'both method,
13 which waits for a NickServ message if the network supports it,
14 otherwise sends the password after connecting.
15 (erc-nickserv-identify-mode): Default to 'both.
16 (erc-nickserv-passwords): Add OFTC and Azzurra to custom options.
17 (erc-nickserv-alist): Indentation fix.
18 (erc-nickserv-identify-on-connect)
19 (erc-nickserv-identify-on-nick-change): Handle 'both method.
20
212006-12-28 Leo <sdl.web@gmail.com> (tiny change)
22
23 * erc.el (erc-iswitchb): Wrap body in unwind-protect so that
24 hitting C-g does not leave iswitchb-mode on.
25
262006-12-27 Michael Olson <mwolson@gnu.org>
27
28 * erc.el (erc-cmd-RECONNECT): New command that calls
29 erc-server-reconnect.
30
31 * erc-backend.el (erc-server-reconnect-count): New server variable
32 that keeps track of reconnection attempts.
33 (erc-server-reconnect-attempts): New option that determines the
34 number of reconnection attempts that ERC will make per server.
35 (erc-server-reconnect-timeout): New option that determines the
36 amount of time, in seconds, that ERC will wait between successive
37 reconnect attempts.
38 (erc-server-reconnect): New function that reestablishes the
39 current IRC connection. Move some commands from
40 erc-process-sentinel-1 here.
41 (erc-process-sentinel-1): If we have been disconnected, loop until
42 we either reconnect or run out of attempts.
43 (erc-server-reconnect-p): Move higher and make this a defsubst,
44 since I'm worried about the current buffer changing from
45 underneath us. Implement limit of number of reconnect attempts..
46
47 * erc.texi (Getting Started): Update for /RECONNECT command.
48
492006-12-26 Michael Olson <mwolson@gnu.org>
50
51 * erc.el (erc-open): Restore old point correctly, or at least get
52 closer to doing so than before.
53
542006-12-13 Leo <sdl.web@gmail.com> (tiny change)
55
56 * erc.el (erc-iswitchb): Temporarily enable iswitchb mode if it
57 isn't active already, instead of leaving it on.
58
592006-12-10 Juanma Barranquero <lekktu@gmail.com>
60
61 * erc-ezbounce.el (erc-ezb-init-session-list): Doc fix.
62
632006-12-08 Michael Olson <mwolson@gnu.org>
64
65 * erc.el: Re-evaluate contributions from a contributor, and found
66 them under 15 lines of non-obvious code, so it is safe to remove
67 the copyright notice.
68 (erc-modules): Remove list module.
69
70 * erc-list.el: Remove, since a contributor who has not completed
71 their assignment has contributed significantly more than 15 lines
72 of code to this file.
73
742006-11-28 Juanma Barranquero <lekktu@gmail.com>
75
76 * erc.el (erc-cmd-BANLIST, erc-cmd-MASSUNBAN): Simplify.
77 (erc-prompt-for-channel-key, erc-ignore-reply-list, erc-send-post-hook)
78 (erc-active-buffer, erc-join-buffer, erc-frame-alist, erc-with-buffer)
79 (erc-modules, erc-display-message-highlight, erc-process-input-line)
80 (erc-cmd-HELP, erc-server-hooks, erc-echo-notice-in-user-buffers)
81 (erc-format-my-nick, erc-echo-notice-in-user-and-target-buffers)
82 (erc-echo-notice-in-first-user-buffer, erc-connection-established)
83 (erc-update-user-nick, erc-update-channel-member, erc-highlight-notice)
84 (erc-command-symbol, erc-add-query, erc-process-script-line)
85 (erc-determine-parameters, erc-client-info, erc-popup-input-buffer):
86 (erc-script-echo): Fix typos in docstrings.
87 (erc-channel-user-op-p, erc-channel-user-voice-p, erc-startup-file-list)
88 (define-erc-module, erc-once-with-server-event)
89 (erc-once-with-server-event-global, erc-debug-irc-protocol)
90 (erc-log-irc-protocol, erc-cmd-LOAD, erc-update-user)
91 (erc-update-current-channel-member, erc-load-script):
92 (erc-mode-line-away-status-format): Doc fixes.
93
942006-11-20 Andrea Russo <rastandy@inventati.org> (tiny change)
95
96 * erc-dcc.el (erc-dcc-chat-setup): Initialize `erc-input-marker'
97 before calling `erc-display-prompt'.
98
992006-11-24 Juanma Barranquero <lekktu@gmail.com>
100
101 * erc.el (erc-after-connect, erc-open-ssl-stream)
102 (erc-display-line-1, erc-display-line):
103 * erc-backend.el (005): Fix space/tab mixup in docstrings.
104
1052006-11-20 Michael Olson <mwolson@gnu.org>
106
107 * erc.el (erc-version-string): Call this Version 5.2 stable
108 pre-release, since it diverges slightly from our 5.2 branch, in
109 that unstable features are not included.
110 (erc-update-modules): Display better error message when module not
111 found.
112
1132006-11-12 Michael Olson <mwolson@gnu.org>
114
115 * erc-log.el: Save all log buffers when Emacs exits, in case
116 someone ignores the warning about open processes. Remove the
117 advice code in the commentary.
118 (erc-save-query-buffers): Docfix.
119 (erc-log-save-all-buffers): New function that saves all ERC
120 buffers to logs.
121 (erc-current-logfile): Fix bug in filename selection, where the
122 current buffer was erroneously being preferred over the given
123 buffer.
124
1252006-11-08 Michael Olson <mwolson@gnu.org>
126
127 * erc.el (erc-string-to-port): Avoid error when a numerical port
128 is passed. Thanks to Zekeriya KOÇ for the report.
129
1302006-11-08 Łukasz Demianiuk <ldemianiuk@gmail.com> (tiny change)
131
132 * erc.el (erc-header-line): Fix typo.
133
1342006-11-06 Juanma Barranquero <lekktu@gmail.com>
135
136 * erc-dcc.el (erc-dcc-send-file): Fix typo in error message.
137
138 * erc.el (read-passwd):
139 * erc-autoaway.el (erc-autoaway-reestablish-idletimer):
140 * erc-truncate.el (truncate): Fix typo in docstring.
141
1422006-10-21 Michael Olson <mwolson@gnu.org>
143
144 * erc.el (erc-iswitchb): Fix bug when hitting C-c C-b without
145 first loading iswitchb. Thanks to Leo for the report.
146
1472006-10-10 Michael Olson <mwolson@gnu.org>
148
149 * erc.el (erc-default-port): Make the default be 6667 instead of
150 ircd. since Mac OS X apparently has problems with looking up that
151 port name.
152
153 * erc-backend.el (353): Receive names after displaying the initial
154 message, instead of before.
155
1562006-10-05 Diane Murray <disumu@x3y2z1.net>
157
158 * erc.el (erc-my-nick-face): New face.
159 (erc): Use FULL-NAME argument, not `erc-user-full-name'. This
160 fixes a bug where the :full-name argument passed to the function
161 was not respected.
162 (erc-format-my-nick): Use `erc-my-nick-face'. This should help
163 make it easier to find messages you sent in conversations when
164 `erc-show-my-nick' is non-nil.
165 (erc-compute-server): Doc fix.
166
1672006-10-01 John J Foerch <jjfoerch@earthlink.net> (tiny change)
168
169 * erc-stamp.el (erc-insert-timestamp-right): Exclude the newline
170 from the erc-timestamp field.
171
1722006-09-11 Michael Olson <mwolson@gnu.org>
173
174 * erc-nicklist.el (erc-nicklist-insert-contents): Add missing
175 parenthesis. Thanks to Stephan Stahl for the report.
176
1772006-09-10 Eric Hanchrow <offby1@blarg.net> (tiny change)
178
179 * erc.el (erc-cmd-IGNORE): Prompt user if this might be a regexp
180 instead of a single user.
181
1822006-09-10 Michael Olson <mwolson@gnu.org>
183
184 * erc.el (erc-generate-new-buffer-name): If this is a server
185 buffer and a process exists already, create a new buffer.
186 (erc-open): If the IRC session was continued, restore the old
187 point. Thanks to Stephan Stahl for the report.
188 (erc-member-ignore-case): Coding style tweak.
189 (erc-cmd-UNIGNORE): Quote the user before comparison. If we don't
190 find the user listed verbatim, try to match them against the list
191 using string-match. In this case, prompt as to whether the regexp
192 should be removed.
193 (erc-ignored-user-p): Remove CL-ism.
194
195 * erc-autoaway.el (erc-autoaway-possibly-set-away): Check to see
196 whether we are already away.
197
198 * erc-menu.el: Fix potential compiler warning.
199
2002006-09-07 Diane Murray <disumu@x3y2z1.net>
201
202 * erc.el: Updated Commentary and URL.
203 (erc-iswitchb, erc-display-line, erc-set-modes, erc-update-modes)
204 (erc-arrange-session-in-multiple-windows): No need to check if
205 `erc-server-process' is bound.
206 (erc-server-buffer-live-p): Doc fix.
207 (erc-part-from-channel): Don't use any initial contents at prompt.
208 (erc-format-nick, erc-format-@nick): Doc fix. Use `when'.
209 (s367): Fixed to support only banmask and channel which is the
210 standard. Also, there's no reason to add a message to each banned
211 user entry trying to persuade the user to use /banlist instead of
212 /mode #channel +b. That part of the message was a little
213 confusing, anyways.
214 (s367-set-by): New catalog entry. The user who set the ban and
215 the time of ban seem to be specific to only certain servers such
216 as freenode.
217
218 * erc-autoaway.el (erc-autoaway-idletimer): Doc fix.
219
220 * erc-backend.el (erc-server-process-alive): No need to check if
221 `erc-server-process' is bound.
222 (367): Use s367 or s367-set-by where appropriate.
223
224 * erc-compat.el: Fixed URL.
225
226 * erc-dcc.el: Updated copyright years. Added Usage section.
227 Changed supported Emacs version number from 21.3.50 to 22 in
228 Commentary.
229
230 * erc-ibuffer.el (erc-server-name, erc-target, erc-away): No need
231 to check if `erc-server-process' is bound.
232
233 * erc-nicklist.el: Added to the Commentary section an explanation
234 that `erc-nicklist-quit' should be called from within the nicklist
235 buffer. Set file coding to utf-8 so a contributor's name is
236 displayed correctly.
237 (erc-nicklist-icons-directory): Use customize type directory
238 instead of string.
239 (erc-nicklist-insert-contents): Set bbdb-nick to an empty string
240 if it wasn't found. This fixes a bug where an error would occur
241 when using `string=' on bbdb-nick if it was nil.
242
243 * erc-replace.el: Removed URL from file information since it
244 doesn't exist.
245
246 * erc-sound.el: Updated copyright years. Fixed Commentary and
247 added Usage section.
248 (define-erc-module): Add and remove `erc-ctcp-query-SOUND' to
249 `erc-ctcp-query-SOUND-hook' here. Removed the keybinding
250 definitions.
251 (erc-play-sound, erc-default-sound, erc-cmd-SOUND)
252 (erc-ctcp-query-SOUND): Doc fix.
253 (erc-play-command): Removed, not necessary anymore.
254 (erc-ctcp-query-SOUND-hook): Set to nil as default. Moved up
255 higher in code, added docstring.
256 (erc-play-sound): Use `play-sound-file'. It exists in GNU Emacs
257 as well since version 21 or earlier. Removed commented-out older
258 version of function.
259
260 * NEWS: Fixed formatting, added channel tracking change.
261
2622006-09-03 Diane Murray <disumu@x3y2z1.net>
263
264 * erc.el: M-x erc RET can now be used to start ERC.
265 (erc-open): Renamed from `erc'.
266 (erc-before-connect): Change erc-select to erc.
267 (erc): Renamed from `erc-select'. Use `erc-open'.
268 (erc-select): Defined as alias of `erc'.
269 (erc-ssl): Renamed from `erc-select-ssl'. Use `erc'.
270 (erc-select-ssl): Defined as alias of `erc-ssl'.
271 (erc-cmd-SERVER): Use `erc'.
272 (erc-query, erc-handle-irc-url): Use `erc-open'.
273
274 * erc-backend.el (erc-process-sentinel-1, JOIN): Use `erc-open'.
275
276 * erc-menu.el (erc-menu-definition): Use `erc'.
277
278 * erc-networks.el: Updated copyright years.
279 (erc-server-select): Use keyword arguments when calling `erc'.
280
281 * erc.texi (Getting Started, Connecting): Changed erc-select to
282 erc.
283
284 * README: Changed erc-select to erc.
285
286 * NEWS: Added note about these changes.
287
288 * FOR-RELEASE: Marked this item as done.
289
2902006-08-21 Diane Murray <disumu@x3y2z1.net>
291
292 * erc-track.el (erc-track-mode-line-mouse-face): New variable.
293 (erc-make-mode-line-buffer-name): Add help-echo and mouse-face
294 properties to channel name.
295
2962006-08-20 Michael Olson <mwolson@gnu.org>
297
298 * erc-identd.el (erc-identd): New customization group.
299 (erc-identd-port): New option that specifies the port to use if
300 none is given as an argument to erc-identd-start.
301 (identd): Place erc-identd-quickstart in erc-connect-pre-hook
302 instead of erc-identd-start so that we deal with the different
303 meaning of the first argument.
304 (erc-identd-start): Use erc-identd-port.
305 (erc-identd-quickstart): New function that ignores any arguments
306 and calls erc-identd-start.
307
308 * erc.el (erc-with-server-buffer): New macro that switches to the
309 current ERC server buffer and runs some code. If no server buffer
310 is available, return nil. This is a useful way to access
311 variables in the server buffer.
312 (erc-get-server-user, erc-add-server-user)
313 (erc-remove-server-user, erc-change-user-nickname)
314 (erc-get-server-nickname-list, erc-get-server-nickname-alist)
315 (erc-ison-p, erc-active-buffer, erc-cmd-IGNORE)
316 (erc-cmd-UNIGNORE, erc-cmd-IDLE, erc-cmd-NICK, erc-cmd-BANLIST)
317 (erc-cmd-MASSUNBAN, erc-nickname-in-use, erc-ignored-user-p)
318 (erc-format-channel-modes): Use it.
319 (erc-once-with-server-event, erc-once-with-server-event-global)
320 (erc-with-buffer, erc-with-all-buffers-of-server): Use make-symbol
321 instead of gensym.
322 (erc-open-server-buffer-p): New function that returns non-nil if
323 the given buffer is an ERC server buffer that has an open IRC
324 process.
325 (erc-with-buffer): Use buffer-live-p here to set a good example,
326 though it isn't really needed here.
327 (erc-away): Mention erc-away-time.
328 (erc): Don't propagate the erc-away setting, since it makes more
329 sense to access it from the server buffer. Set up the prompt
330 before connecting rather than after. Run erc-connect-pre-hook
331 with the buffer as an argument, instead of no arguments.
332 (erc-cmd-GAWAY): Use erc-open-server-buffer-p instead of
333 erc-server-buffer-p so that only open connections are set away.
334 (erc-cmd-GQUIT): Use erc-open-server-buffer-p.
335 (erc-process-away): Docfix. Don't set erc-away in channel
336 buffers.
337 (erc-set-current-nick): Make this uniform with the style used in
338 erc-current-nick.
339 (erc-away-time): Rename from erc-away-p, since this is no longer a
340 boolean-style predicate.
341 (erc-format-away-status): Use it.
342 (erc-initialize-log-marker): Accept a `buffer' argument.
343 (erc-connect-pre-hook): Docfix.
344 (erc-connection-established): Make sure this runs in the correct
345 buffer.
346 (erc-set-initial-user-mode): Accept a `buffer' argument.
347
348 * erc-stamp.el (erc-add-timestamp): Use erc-away-time.
349
350 * erc-spelling.el (erc-spelling-init): Use
351 erc-with-server-buffer. Accept `buffer' argument.
352 (spelling): Call erc-spelling-init with the `buffer' argument.
353
354 * erc-speedbar.el (erc-speedbar-buttons): Use erc-server-buffer-p.
355
356 * erc-pcomplete.el (pcomplete/erc-mode/UNIGNORE)
357 (pcomplete-erc-all-nicks): Use erc-with-server-buffer.
358
359 * erc-notify.el (erc-notify-timer, erc-cmd-NOTIFY): Use
360 erc-with-server-buffer.
361
362 * erc-networks.el (erc-network, erc-current-network)
363 (erc-network-name): Use erc-with-server-buffer.
364
365 * erc-netsplit.el (erc-cmd-WHOLEFT): Use erc-with-server-buffer.
366
367 * erc-match.el (erc-log-matches, erc-log-matches-come-back): Use
368 erc-away-time.
369
370 * erc-log.el (log): Use erc-away-time. Remove unnecessary check.
371 Pass `buffer' argument to erc-log-setup-logging instead of setting
372 the current buffer. Ditto for erc-log-disable-logging.
373 (erc-log-setup-logging, erc-log-disable-loggin): Accept a `buffer'
374 argument.
375
376 * erc-list.el (erc-chanlist): Use erc-with-server-buffer.
377
378 * erc-ibuffer.el (erc-away): Use erc-away-time.
379
380 * erc-dcc.el (erc-dcc-get-filter): Temporarily make the buffer
381 read only instead of permanently doing so.
382
383 * erc-compat.el (erc-gensym, *erc-sym-counter*): Remove, since
384 Emacs Lisp has make-symbol, which is better.
385
386 * erc-chess.el (erc-chess-handler, erc-cmd-CHESS): Use
387 erc-with-server-buffer.
388
389 * erc-capab.el (capab-identify): Only deal with server buffers
390 that have an open IRC process.
391 (erc-capab-identify-add-prefix): Use erc-with-server-buffer.
392
393 * erc-backend.el (erc-server-connected): Docfix. Recommend the
394 `erc-server-process-alive' function.
395 (erc-coding-system-for-target): Supply a default target if one is
396 not given.
397 (erc-server-send): Simplify slightly.
398 (erc-call-hooks): Use erc-with-server-buffer.
399 (erc-server-connect, erc-server-setup-periodical-ping): Accept
400 `buffer' argument.
401
402 * erc-autoaway.el (erc-autoaway-reestablish-idletimer): Move
403 higher to avoid an automatic load snafu.
404 (erc-autoaway-some-server-buffer): New function that returns an
405 ERC server buffer with a live connection, or nil otherwise.
406 (erc-autoaway-insinuate-maybe): New function that adds the
407 autoaway reset function to post-command-hook if at least one ERC
408 process is alive.
409 (erc-autoaway-remove-maybe): New function that removes the
410 autoaway reset function from post-command-hook if no ERC process
411 is alive.
412 (autoaway): Don't touch post-command-hook unless an IRC process is
413 already open. Remove our addition to post-command-hook as soon as
414 there are no more IRC processes open. Reset the indicators before
415 connecting to an IRC server, which fixes a bug when re-connecting.
416 (erc-autoaway-reset-idle-user): Call erc-autoaway-remove-maybe if
417 there are no more IRC processes open.
418 (erc-autoaway-set-back): Pick an open IRC process. Accept an
419 argument which is a function call if we can't find one.
420 (erc-autoaway-some-open-server-buffer): New function which returns
421 an ERC server buffer with an open connection and a user that is
422 not away.
423 (erc-autoaway-possibly-set-away, erc-autoaway-set-away): Use it.
424 (erc-autoaway-set-away): Accept a `notest' argument which is used
425 to avoid testing the same thing twice.
426 (erc-autoaway-last-sent-time, erc-autoaway-caused-away): Move
427 higher in file to fix byte-compile warning.
428
4292006-08-20 Diane Murray <disumu@x3y2z1.net>
430
431 * erc-backend.el (erc-process-sentinel-1): Doc fix. Let
432 `erc-server-reconnect-p' check all condition cases.
433 (erc-server-reconnect-p): Moved rest of checks from
434 `erc-process-sentinel-1' to here. Now takes an argument, EVENT.
435
4362006-08-14 Diane Murray <disumu@x3y2z1.net>
437
438 * erc-menu.el: Updated copyright years. Removed EmacsWiki URL.
439 (erc-menu-definition): Name the menu "ERC" instead of "IRC" to
440 avoid confusion with rcirc and other clients.
441
442 * erc-backend.el (erc-server-banned): New variable.
443 (erc-server-connect): Set `erc-server-banned' to nil.
444 (erc-process-sentinel-1): Use `erc-server-reconnect-p'.
445 (erc-server-reconnect-p): New function. Return non-nil if the
446 user wants automatic reconnects and if the user has not been
447 banned from the server. This should fix a bug where ERC gets into
448 a loop trying to reconnect with no way to stop it when the user is
449 denied access to the server due to a server ban. It might also
450 help when Tor users are blocked from freenode if freenode servers
451 send the 465 message before disconnecting.
452 (465): Handle "banned from server" error notices.
453
4542006-08-13 Romain Francoise <romain@orebokech.com>
455
456 * erc-match.el (erc-log-matches-make-buffer): End `y-or-n-p'
457 prompt with a space.
458
4592006-08-13 Michael Olson <mwolson@gnu.org>
460
461 * erc-backend.el (erc-server-timed-out): New variable that
462 indicates whether the current connection has timed out due to
463 failure to respond to a ping.
464 (erc-server-send-ping): Set erc-server-timed-out to t.
465 (erc-server-connect): Initialize erc-server-timed-out to nil.
466 (erc-process-sentinel-1): Consult erc-server-timed-out.
467
4682006-08-11 Michael Olson <mwolson@gnu.org>
469
470 * erc-fill.el (erc-fill): Skip any initial empty lines so that we
471 avoid errors when inserting disconnect messages and other messages
472 that begin with newlines.
473
4742006-08-07 Michael Olson <mwolson@gnu.org>
475
476 * erc-backend.el (erc-process-sentinel-1): Use erc-display-message
477 in several places instead of inserting text.
478 (erc-process-sentinel): Move to the input-marker before removing
479 the prompt.
480
481 * erc.el (erc-port): Fix customization options.
482 (erc-display-message): Handle null type explicitly. Previously,
483 this was relying on a chance side-effect. Cosmetic indentation
484 tweak.
485 (english): Add 'finished and 'terminated entries to the catalog.
486 Add initial and terminal newlines to 'disconnected and
487 'disconnected-noreconnect entries. Avoid long lines.
488 (erc-cmd-QUIT): Bind the current erc-server-process to
489 server-proc. If the IRC server responds quickly, it is possible
490 for the connection to close, and hence server buffer to be killed,
491 if erc-kill-server-buffer-on-quit is non-nil. This avoids that
492 problem.
493
4942006-08-06 Michael Olson <mwolson@gnu.org>
495
496 * erc-backend.el (erc-server-send-queue): Update from Circe
497 version of this function.
498 (erc-server-ping-timer-alist): New variable that keeps track of
499 ping timers according to their associated server.
500 (erc-server-last-received-time): New variable that specifies the
501 time of the last message we received from the server. This is
502 used to detect hung processes.
503 (erc-server-send-ping): New function that sends a ping to the IRC
504 process corresponding with the given buffer. Split from
505 erc-server-setup-periodical-ping. If the server buffer no longer
506 exists, cancel the timer. If the server process has not given us
507 a message, including PING responses, since the last PING, kill it.
508 This is necessary to deal with some aberrant freenode behavior.
509 Idea taken from rcirc.
510 (erc-server-setup-periodical-ping): Rename from
511 erc-server-setup-periodical-server-ping.
512 (erc-server-filter-function): Use erc-current-time instead of
513 current-time.
514
515 * erc.el (erc-arrange-session-in-multiple-windows): Fix bug with
516 multi-tty Emacs.
517 (erc-select-startup-file): Fix bug introduced by recent change.
518 (erc-cmd-QUIT): If the IRC process has not terminated itself
519 within 4 seconds of completing our quit-hook, kill it manually.
520 Freenode in particular needs this.
521 (erc-connection-established): Use erc-server-setup-periodical-ping
522 instead of erc-server-setup-periodical-server-ping.
523
5242006-08-05 Michael Olson <mwolson@gnu.org>
525
526 * erc-log.el (erc-log-standardize-name): New function that returns
527 a filename that is safe for use for a log file.
528 (erc-current-logfile): Use it.
529
530 * erc.el (erc-startup-file-list): Search in ~/.emacs.d first,
531 since that is a fairly standard directory.
532 (erc-select-startup-file): Re-write to use
533 convert-standard-filename, which will ensure that MS-DOS systems
534 look for the _ercrc.el file.
535
5362006-08-02 Michael Olson <mwolson@gnu.org>
537
538 * erc.el (erc-version-string): Release ERC 5.1.4.
539
540 * Makefile, NEWS, erc.texi: Update for the 5.1.4 release.
541
542 * erc.el (erc-active-buffer): Fix bug that caused messages to go
543 to the wrong buffer. Thanks to offby1 for the report.
544
545 * erc-backend.el (erc-coding-system-for-target): Handle case where
546 target is nil. Thanks to Kai Fan for the patch.
547
5482006-07-29 Michael Olson <mwolson@gnu.org>
549
550 * erc-log.el (erc-log-setup-logging): Don't offer to save the
551 buffer. It will be saved automatically killed. Thanks to Johan
552 Bockgård and Tassilo Horn for pointing this out.
553
5542006-07-27 Johan Bockgård <bojohan@users.sourceforge.net>
555
556 * erc.el (define-erc-module): Make find-function and find-variable
557 find the names constructed by `define-erc-module' in Emacs 22.
558
5592006-07-14 Michael Olson <mwolson@gnu.org>
560
561 * erc-log.el (log): Make sure that we enable logging on
562 already-opened buffers as well, in case the user toggles this
563 module after loading ERC. Also be sure to remove logging ability
564 from all ERC buffers when the module is disabled.
565 (erc-log-setup-logging): Set buffer-file-name to nil rather than
566 the empty string. This should fix some errors that occur when
567 quitting Emacs without first killing all ERC buffers.
568 (erc-log-disable-logging): New function that removes the logging
569 ability from the current buffer.
570
571 * erc-spelling.el (spelling): Use dolist and buffer-live-p.
572
5732006-07-12 Michael Olson <mwolson@gnu.org>
574
575 * erc-match.el (erc-log-matches): Bind inhibit-read-only rather
576 than call toggle-read-only.
577
578 * erc.el (erc-handle-irc-url): Move here from erc-goodies.el and
579 add autoload cookie.
580
5812006-07-09 Michael Olson <mwolson@gnu.org>
582
583 * erc.el (erc-version-string): Release ERC 5.1.3.
584
585 * erc.texi: Update for the 5.1.3 release.
586
587 * erc-autoaway.el (erc-autoaway-set-back): Fix bug after returning
588 from being set automatically away and current buffer is not an ERC
589 buffer.
590
591 * erc-identd.el: Fix compiler error.
592
593 * erc.texi (Development): Use @subheading instead of @subsection.
594 (Advanced Usage): Add menu.
595 (Connecting): Fully document how to connect to an IRC server.
596 (Options, Tips and Tricks, Sample Configuration): New unwritten
597 sections.
598
599 * erc.el (erc-server, erc-port, erc-nick, erc-nick-uniquifier)
600 (erc-user-full-name, erc-password): Docfixes and customization
601 interface tweaks.
602 (erc-try-new-nick-p): Rename from
603 `erc-manual-set-nick-on-bad-nick-p' and invert meaning.
604 (erc-nickname-in-use): Use `erc-try-new-nick-p'. Check the length
605 of `erc-nick-uniquifier', in case someone wants multiple
606 characters.
607 (erc-compute-server, erc-compute-nick, erc-compute-full-name)
608 (erc-compute-port): Docfixes.
609
610 * erc-log.el (log): Move all add-hook calls here, rather than
611 executing them immediately, and also cause them to be un-hooked
612 when the module is removed.
613 (erc-save-buffer-on-part): Move next to
614 `erc-save-queries-on-quit'.
615 (erc-save-buffer-on-quit, erc-save-queries-on-quit): Default to t.
616 (erc-log-write-after-send, erc-log-write-after-insert): Default to
617 nil. This makes things fast, but reasonably failsafe, by default.
618
6192006-07-08 Michael Olson <mwolson@gnu.org>
620
621 * erc-log.el (erc-log-insert-log-on-open): Make this nil by
622 default, since most IRC clients don't do this.
623 (erc-log-write-after-send): New option that determines whether the
624 log file will be written to after every sent message.
625 (erc-log-write-after-insert): New option that determines whether
626 the log file will be written to when new text is added to a logged
627 ERC buffer.
628 (log): Use the aforementioned options.
629
630 * erc.texi (Modules): Document the "completion" module.
631
632 * erc-pcomplete.el (pcomplete-erc-nicks): Make sure that we don't
633 have a nil element in the list when ignore-self is non-nil.
634
6352006-07-05 Michael Olson <mwolson@gnu.org>
636
637 * erc.el (erc-modules): Use `set' instead of `set-default', since
638 this setting should never be buffer-local. Add the `page' module
639 to the list.
640
641 * erc.texi (Modules): Add entries for `list' and `page' modules.
642 Change "spell" to "spelling".
643 (History): Use past tense throughout.
644
6452006-07-02 Michael Olson <mwolson@gnu.org>
646
647 * erc-backend.el (erc-call-hooks): Fix (stringp nil) error that
648 can happen when doing /PART.
649
650 * erc.el (erc-quit-reason-various-alist)
651 (erc-part-reason-various-alist): In the example, use "^$" as an
652 example, since "" matches anything.
653 (erc-quit-reason-various, erc-part-reason-various): If no argument
654 is given, and no matches are found, use our default reason instead
655 of "nil".
656
6572006-06-30 Michael Olson <mwolson@gnu.org>
658
659 * erc.texi (Modules): Mention identd.
660 (Releases): Update mailing list address and download location.
661 (Development): Refactor. Provide updated directions for Arch.
662 Make URLs clickable.
663 (Keystroke Summary): Typo fix. Use more Texinfo syntax.
664 (Getting Started): Give simpler example. We do not need to
665 explicitly load every module.
666 (History): Update.
667
668 * erc-autoaway.el, erc-join.el, erc-backend.el, erc-bbdb.el:
669 erc-button.el, erc-chess.el, erc-compat.el, erc-hecomplete.el:
670 erc-dcc.el, erc-ezbounce.el, erc-fill.el, erc-ibuffer.el:
671 erc-imenu.el, erc-list.el, erc-log.el, erc-match.el, erc-menu.el:
672 erc-networks.el, erc-netsplit.el, erc-nicklist.el:
673 erc-services.el, erc-pcomplete.el, erc-replace.el, erc-ring.el:
674 erc-speedbar.el, erc-spelling.el, erc-stamp.el, erc-track.el:
675 erc.el: Remove version strings.
676
677 * erc.el (erc-cmd-SMV): Remove, since we do not have meaningful
678 module versions anymore.
679 (erc-version-modules): Remove, since we do not use this function
680 anymore.
681 (erc-latest-version, erc-ediff-latest-version): Remove, since this
682 was only useful back when ERC consisted of one file.
683 (erc-modules): Add line for identd.
684 (erc-get-channel-mode-from-keypress): Typo fix.
685
686 * erc-imenu.el: Remove unnecessary lines in header.
687
688 * erc-goodies.el (erc-handle-irc-url): Docfix.
689
690 * erc-identd.el: Define an ERC module for this.
691 (erc-identd-start): Don't create a process buffer if possible.
692 Otherwise, use conventional hidden names for process buffers.
693
6942006-06-29 Michael Olson <mwolson@gnu.org>
695
696 * erc-backend.el (erc-coding-system-for-target): Match
697 case-insensitively. Use a pattern match instead of `assoc', as
698 per the documentation for `erc-encoding-coding-alist'.
699
700 * erc-track.el (erc-track-shorten-aggressively): Fix typo.
701
7022006-06-27 Michael Olson <mwolson@gnu.org>
703
704 * erc.el: Update maintainer information and URLs.
705
7062006-06-14 Michael Olson <mwolson@gnu.org>
707
708 * erc.el (erc-active-buffer): If the active buffer has been
709 deleted, default to the server buffer.
710 (erc-toggle-flood-control): When the user hits C-c C-f, make flood
711 control really toggle, not unconditionally turn off.
712
7132006-06-12 Michael Olson <mwolson@gnu.org>
714
715 * NEWS: Add items since the 5.1.2 release.
716
717 * erc-autoaway.el (erc-autoaway-caused-away): New variable that
718 indicates whether the current away status was caused by this
719 module.
720 (erc-autoaway-set-back): Only set back if this module set the user
721 away.
722 (erc-autoaway-set-away): Update `erc-autoaway-caused-away'.
723 (erc-autoaway-reset-indicators): New function that resets some
724 indicators when the user is no longer away.
725 (autoaway): Add the above function to the 305 hook.
726
7272006-06-05 Romain Francoise <romain@orebokech.com>
728
729 * erc.texi (History): Fix various typos.
730
7312006-06-04 Michael Olson <mwolson@gnu.org>
732
733 * erc-autoaway.el (erc-autoaway-idle-method): Move after the
734 definition of the autoaway module.
735 (autoaway): Don't do anything if erc-autoaway-idle-method is
736 unbound. This prevents an error on startup.
737
7382006-06-03 Michael Olson <mwolson@gnu.org>
739
740 * erc-autoaway.el: Thanks to Mark Plaksin for the ideas and patch.
741 (erc-autoaway-idle-method): Renamed from
742 `erc-autoaway-use-emacs-idle'. We have more than two choices for
743 how to do this, so it's best to make this take symbol values.
744 Improve documentation. Remove warning against Emacs idle-time;
745 the point is moot now that we get user idle time via a different
746 method. Make sure we disable and re-enable the module when
747 changing this value.
748 (autoaway): Conditionalize on the above option. If using the idle
749 timer or user idle methods, don't add anything to the
750 send-completed or server-001 hooks, since it is unnecessary.
751 (erc-autoaway-reestablish-idletimer, erc-autoaway-message):
752 Docfix.
753 (erc-autoaway-idle-seconds): Use erc-autoaway-idle-method.
754 (erc-autoaway-reset-idle-irc): Renamed from
755 `erc-autoaway-reset-idle'. Don't pass line to
756 `erc-autoaway-set-away', since it is not used.
757 (erc-autoaway-reset-idle-user): New function that resets the idle
758 state for user idle time.
759 (erc-autoaway-set-back): Remove line argument, since it is not
760 used.
761
7622006-06-01 Michael Olson <mwolson@gnu.org>
763
764 * erc.el (erc-buffer-filter): Make sure all buffers returned from
765 this are live.
766
7672006-05-01 Edward O'Connor <ted@oconnor.cx>
768
769 * erc-goodies.el (erc-handle-irc-url): New function, suitable as
770 a value for `url-irc-function'.
771
7722006-04-18 Diane Murray <disumu@x3y2z1.net>
773
774 * erc-pcomplete.el (pcomplete-erc-nicks): Added new optional
775 argument IGNORE-SELF. If this is non-nil, don't return the user's
776 current nickname. Doc fix.
777 (pcomplete/erc-mode/complete-command): Don't complete the current
778 nickname.
779
7802006-04-05 Diane Murray <disumu@x3y2z1.net>
781
782 * erc.el (erc-cmd-SV): Removed the exclamation point. Show the
783 build date as it's shown in `emacs-version'.
784
785 * erc-capab.el (erc-capab-identify-add-prefix): Insert the prefix
786 with the same face property as the previous character.
787
7882006-04-02 Michael Olson <mwolson@gnu.org>
789
790 * erc-backend.el, erc-ezbounce.el, erc-join.el, erc-netsplit.el,
791 erc.el: Make sure to include a newline inside of negated classes,
792 so that a newline is not matched.
793
7942006-04-01 Michael Olson <mwolson@gnu.org>
795
796 * erc-backend.el (erc-server-connect-function): Don't try to
797 detect the existence of the `open-network-stream-nowait' function,
798 since I can't find it in Emacs21, XEmacs21, or Emacs22.
799
8002006-03-27 Michael Olson <mwolson@gnu.org>
801
802 * erc.texi: Update direntry. Remove unneeded local variables.
803
8042006-03-26 Michael Olson <mwolson@gnu.org>
805
806 * erc.el (erc-header-line): New face that will be used to colorize
807 the text of the header-line, provided that
808 `erc-header-line-face-method' is non-nil.
809 (erc-prompt-face): Fix formatting.
810 (erc-header-line-face-method): New option that determines the
811 method used for colorizing header-line text. This may be a
812 function, nil, or non-nil.
813 (erc-update-mode-line-buffer): Use the aforementioned option and
814 face to colorize the header-line text, if that is what the user
815 wants.
816 (erc-send-input): If flood control is not activated, don't split
817 the input line.
818
8192006-03-25 Michael Olson <mwolson@gnu.org>
820
821 * erc.el (erc-cmd-QUOTE): Install patch from Aravind Gottipati
822 that fixes the case where there is no leading whitespace. Only
823 remove the first space character, though.
824
825 * erc-identd.el (erc-identd-start): Fix a bug by making sure that
826 erc-identd-process is set properly.
827 (erc-identd-start, erc-identd-stop): Add autoload cookies.
828 (erc-identd-start): Pass :host parameter so this works with Emacs
829 22.
830
8312006-03-09 Diane Murray <disumu@x3y2z1.net>
832
833 * erc-button.el (erc-button-keymap): Use <backtab> rather than
834 <C-tab> for `erc-button-previous' as it is a more standard key
835 binding for this type of function.
836
8372006-02-28 Diane Murray <disumu@x3y2z1.net>
838
839 * erc-capab.el: Removed things that were accidentally committed on
840 2006-02-20. Removed Todo section.
841 (erc-capab-unidentified): Removed.
842
8432006-02-26 Michael Olson <mwolson@gnu.org>
844
845 * erc-capab.el: Use (eval-when-compile (require 'cl)).
846 (erc-capab-unidentified): Fix compiler warning by specifying
847 group.
848
8492006-02-20 Diane Murray <disumu@x3y2z1.net>
850
851 * erc-capab.el (erc-capab-send-identify-messages): Fixed comment
852 to explain thoughts better. `erc-server-parameters' is an
853 associated list when it's set, not a string.
854
8552006-02-19 Michael Olson <mwolson@gnu.org>
856
857 * erc-capab.el (erc-capab-send-identify-messages): Make sure some
858 parameters are strings before using them. Thanks to Alejandro
859 Benitez for the report.
860
861 * erc.el (erc-version-string): Release ERC 5.1.2.
862
8632006-02-19 Diane Murray <disumu@x3y2z1.net>
864
865 * erc-button.el (erc-button-keymap): Bind `erc-button-previous' to
866 <C-tab>.
867 (erc-button-previous): New function.
868
8692006-02-15 Michael Olson <mwolson@gnu.org>
870
871 * NEWS: Add category for ERC 5.2.
872
873 * erc.el (erc): Move to the end of the buffer when a continued
874 session is detected. Thanks to e1f and indio for the report and
875 testing a potential fix.
876
8772006-02-14 Michael Olson <mwolson@gnu.org>
878
879 * debian/changelog: Prepare a new Debian package.
880
881 * Makefile (debprepare): New rule that creates an ERC snapshot
882 directory for use in both new Debian releases and revisions for
883 Debian packages.
884 (debrelease, debrevision-mwolson): Use debprepare.
885
886 * NEWS: Bring up-to-date.
887
888 * erc-stamp.el (erc-insert-timestamp-right): For now, put
889 timestamps before rather than after erc-fill-column when
890 erc-timestamp-right-column is nil. This way we won't surprise
891 anyone unpleasantly, or so it is hoped.
892
8932006-02-13 Michael Olson <mwolson@gnu.org>
894
895 * erc-dcc.el: Use (eval-when-compile (require 'cl)).
896
8972006-02-12 Michael Olson <mwolson@gnu.org>
898
899 * erc-autoaway.el, erc-dcc.el, erc-ezbounce.el, erc-fill.el
900 * erc-goodies.el, erc-hecomplete.el, erc-ibuffer.el, erc-identd.el
901 * erc-imenu.el, erc-join.el, erc-lang.el, erc-list.el, erc-log.el
902 * erc-match.el, erc-menu.el, erc-netsplit.el, erc-networks.el
903 * erc-notify.el, erc-page.el, erc-pcomplete.el, erc-replace.el
904 * erc-ring.el, erc-services.el, erc-sound.el, erc-speedbar.el
905 * erc-spelling.el, erc-track.el, erc-truncate.el, erc-xdcc.el:
906 Add 2006 to copyright years, to comply with the changed guidelines.
907
9082006-02-11 Michael Olson <mwolson@gnu.org>
909
910 * erc.el (erc-update-modules): Handle erc-capab-identify
911 correctly. Make some requirements shorter, so that it's easier to
912 see why they are needed.
913
914 * erc-capab.el: Add autoload cookie for capab-identify.
915 (erc-capab-send-identify-messages, erc-capab-identify-activate):
916 Minor whitespace fix in code.
917
918 * erc-stamp.el (erc-timestamp-use-align-to): Renamed from
919 `erc-timestamp-right-align-by-pixel'. Set the default based on
920 whether we are in Emacs 22, and using X. Improve documentation.
921 (erc-insert-aligned): Remove calculation of offset, since
922 :align-to pos works after all. Unlike the previous solution, this
923 one works when erc-stamp.el is compiled.
924 (erc-insert-timestamp-right): Don't add length of string, and then
925 later remove its displayed width. This puts timestamps after
926 erc-fill-column when erc-timestamp-right-column is nil, rather
927 than before it. It also fixes a subtle bug. Remove use of
928 `current-window', since there is no variable by that name in
929 Emacs21, Emacs22, or XEmacs21 beta. Check to see whether
930 `erc-fill-column' is non-nil before using it.
931
9322006-02-11 Diane Murray <disumu@x3y2z1.net>
933
934 * erc-list.el: Define `list' module which sets the alias
935 `erc-cmd-LIST' to `erc-list-channels' when enabled and
936 `erc-list-channels-simple' when disabled.
937 (erc-list-channels): Was `erc-cmd-LIST', renamed.
938 (erc-list-channels-simple): New function.
939
940 * erc.el (erc-modules): Added `list' to enabled modules. Changed
941 `capab-identify' description. Moved customization options left in
942 source code.
943
944 * erc-menu.el (erc-menu-definition): Use `erc-list-channels'.
945
946 * erc-capab.el: Put a little more detail into Usage section.
947 (define-erc-module): Run `erc-capab-identify-setup' in all open
948 server buffers when enabling.
949 (erc-capab-identify-setup): Make PROC and PARSED optional
950 arguments.
951 (erc-capab-identify-add-prefix): Simplified nickname regexp. This
952 should now also match nicknames that are formatted differently
953 than the default.
954
955 * erc-spelling.el (define-erc-module): Make sure there's a buffer
956 before calling `with-current-buffer'.
957
9582006-02-10 Michael Olson <mwolson@gnu.org>
959
960 * Makefile (debbuild): Split from debrelease.
961 (debrevision-mwolson): New rule that causes a Debian revision to
962 be built.
963
964 * erc.el (erc-migrate-modules): Use a better algorithm. Thanks to
965 Johan Bockgård.
966 (erc-modules): Change use of 'pcomplete to 'completion.
967
9682006-02-09 Diane Murray <disumu@x3y2z1.net>
969
970 * erc.el (erc-get-parsed-vector, erc-get-parsed-vector-nick)
971 * erc-capab.el: Require erc.
972 (erc-capab-send-identify-messages): Use `erc-server-send'.
973 (erc-capab-identify-remove/set-identified-flag): Use 1 and 0 as
974 the flags so we can also check whether the `erc-identified' text
975 property is there at all.
976 (erc-capab-identify-add-prefix): Use `erc-capab-find-parsed'.
977 This fixes a bug where the prefix wasn't inserted when timestamps
978 are inserted on the right. Tweaked nickname regexp.
979 (erc-capab-find-parsed): New function.
980 (erc-capab-get-unidentified-nickname): Updated to check for 0
981 flag. Only get nickname if there's a nickuserhost associated with
982 this message.
983
984 * erc-capab.el: New file. Adds the new module
985 `erc-capab-identify', which allows flagging of unidentified users
986 on servers running an ircd based on dancer - irc.freenode.net, for
987 example.
988
989 * erc.el (erc-modules): Added `capab-identify' to options.
990 (erc-get-parsed-vector, erc-get-parsed-vector-nick)
991 (erc-get-parsed-vector-type): Moved here from erc-match.el.
992
993 * erc-match.el (erc-get-parsed-vector, erc-get-parsed-vector-nick)
994 (erc-get-parsed-vector-type): Moved these functions to erc.el
995 since they can be useful outside of the text matching module.
996
997 * NEWS: Added erc-capab.el.
998
999 * erc-dcc.el, erc-stamp.el, erc-xdcc.el: Changed "Emacs IRC Client"
1000 to "ERC".
1001
10022006-02-07 Michael Olson <mwolson@gnu.org>
1003
1004 * ChangeLog.01, ChangeLog.02, ChangeLog.03, ChangeLog.04,
1005 ChangeLog.05: Rename from ChangeLog.NNNN in order to disambiguate
1006 the filenames in DOS.
1007
1008 * erc-goodies.el: Comment fix.
1009
1010 * erc-hecomplete.el: Rename from erc-complete.el. Update
1011 commentary. Use define-erc-module so that it's possible to
1012 actually use this.
1013 (erc-hecomplete): Rename function from `erc-complete'.
1014 (erc-hecomplete): Rename group from `erc-old-complete'. Docfix.
1015
1016 * erc-join.el: Rename from erc-autojoin.el.
1017
1018 * erc-networks.el: Rename from erc-nets.el.
1019
1020 * erc-services.el: Rename from erc-nickserv.el.
1021
1022 * erc-stamp.el (erc-insert-aligned): Don't take 3rd argument. Use
1023 the simpler `indent-to' function when
1024 `erc-timestamp-right-align-by-pixel' is nil.
1025 (erc-insert-timestamp-right): If the timestamp goes on the
1026 following line, don't add timestamp properties to the spaces in
1027 front of it.
1028
1029 * erc.el (erc-migrate-modules): New function that eases migration
1030 of module names.
1031 (erc-modules): Call erc-migrate-modules in the :get accessor.
1032 (erc-modules, erc-update-modules): Update for new modules names.
1033 (erc-cmd-SMV): Remove, since this does not give useful output due
1034 to the version strings being removed from ERC modules.
1035
10362006-02-05 Michael Olson <mwolson@gnu.org>
1037
1038 * erc-spelling.el (erc-spelling-init): If
1039 `erc-spelling-dictionaries' is nil, do not set
1040 ispell-local-dictionary. Before, it was being set to nil, which
1041 was causing a long delay while the ispell process restarted.
1042 (erc-spelling-unhighlight-word): New function that removes
1043 flyspell properties from a spell-checked word.
1044 (erc-spelling-flyspell-verify): Don't spell-check nicks or words
1045 that have '/' before them.
1046
10472006-02-04 Michael Olson <mwolson@gnu.org>
1048
1049 * erc-autojoin.el: Use (eval-when-compile (require 'cl)).
1050
1051 * erc-complete.el (erc-nick-completion-exclude-myself)
1052 (erc-try-complete-nick): Use better function for getting list of
1053 channel users.
1054
1055 * erc-goodies.el: Docfix.
1056
1057 * erc-stamp.el: Use new arch tagline, since the other one wasn't
1058 being treated properly.
1059
1060 * erc.el (erc-version-string): Release ERC 5.1.1.
1061
10622006-02-03 Zhang Wei <id.brep@gmail.com>
1063
1064 * erc.el (erc-version-string): Don't hard-code Emacs version.
1065 (erc-version): Use emacs-version.
1066
10672006-01-31 Michael Olson <mwolson@gnu.org>
1068
1069 * erc-stamp.el: Update copyright years.
1070
10712006-01-30 Simon Josefsson <jas@extundo.com>
1072
1073 * erc.el (erc-open-ssl-stream): Use tls.el.
1074
10752006-01-30 Michael Olson <mwolson@gnu.org>
1076
1077 * erc-stamp.el (erc-timestamp-right-align-by-pixel): New option
1078 that determines whether to use pixel values to align right
1079 timestamps. The default is not to do so, since it only works with
1080 Emacs22 on X, and even then some people have trouble.
1081 (erc-insert-aligned): Use `erc-timestamp-right-align-by-pixel'.
1082
10832006-01-29 Michael Olson <mwolson@gnu.org>
1084
1085 * ChangeLog, ChangeLog.2005, ChangeLog.2004, ChangeLog.2003,
1086 ChangeLog.2002, ChangeLog.2001: Add "See ChangeLog.NNNN" line for
1087 earlier changes. Use utf-8 encoding. Fix some accent typos.
1088
1089 * erc-speedbar.el (erc-speedbar-buttons): Fix reference to free
1090 variable.
1091 (erc-speedbar-goto-buffer): Fix compiler warning.
1092
1093 * erc-ibuffer.el: Use `define-ibuffer-filter' instead of
1094 `ibuffer-degine-limiter'. Use `define-ibuffer-column' instead of
1095 `ibuffer-define-column'. Require 'ibuf-ext so that the macros
1096 work without compiler warnings.
1097
1098 * man/erc.texi (Obtaining ERC, Installation): Note that these
1099 sections may be skipped if using the version of ERC that comes
1100 with Emacs.
1101
11022006-01-29 Edward O'Connor <ted@oconnor.cx>
1103
1104 * erc-viper.el: Remove. Now that ERC is included in Emacs, these
1105 work-arounds live in Viper itself.
1106
11072006-01-28 Michael Olson <mwolson@gnu.org>
1108
1109 * erc-*.el, erc.texi, NEWS: Add Arch taglines as per Emacs
1110 guidelines.
1111
1112 * erc-*.el: Space out copyright years like the rest of Emacs. Use
1113 the Emacs copyright statement. Refer to ourselves as ERC rather
1114 than "Emacs IRC Client", since there are now several IRC clients
1115 for Emacs.
1116
1117 * erc-compat.el (erc-emacs-build-time): Define as a variable.
1118
1119 * erc-log.el (erc-log-setup-logging): Use write-file-functions.
1120
1121 * erc-ibuffer.el: Require 'erc.
1122
1123 * erc-stamp.el (erc-insert-aligned): Only use the special text
1124 property when window-system is X.
1125
1126 * erc.texi: Adapt for inclusion in Emacs.
1127
11282006-01-28 Johan Bockgård <bojohan@users.sourceforge.net>
1129
1130 * erc.el (erc-format-message): More `cl' breakage; don't use
1131 `oddp'.
1132
11332006-01-27 Michael Olson <mwolson@gnu.org>
1134
1135 * debian/changelog: Update for new release.
1136
1137 * debian/control (Description): Update.
1138
1139 * debian/rules: Concatenate ChangeLog for 2005.
1140
1141 * Makefile (MISC): Include ChangeLog.2005 and erc.texi.
1142 (debrelease, release): Copy images directory.
1143
1144 * NEWS: Spelling fixes. Add items for recent changes.
1145
1146 * erc.el (erc): Move call to erc-update-modules before the call to
1147 erc-mode. This should fix a timestamp display issue.
1148 (erc-version-string): Release ERC 5.1.
1149
11502006-01-26 Michael Olson <mwolson@gnu.org>
1151
1152 * erc-stamp.el (erc-insert-aligned): New function that inserts
1153 text in an perfectly-aligned way relative to the right margin. It
1154 only works well with Emacs22. A sane fallback is provided for
1155 other versions of Emacs.
1156 (erc-insert-timestamp-right): Use the new function.
1157
11582006-01-25 Edward O'Connor <ted@oconnor.cx>
1159
1160 * erc.el (erc-modules): Ensure that `erc-button-mode' gets enabled
1161 before `erc-match-mode'.
1162
1163 * erc-match.el (match): Append `erc-match-message' to
1164 `erc-insert-modify-hook'.
1165
11662006-01-25 Michael Olson <mwolson@gnu.org>
1167
1168 * FOR-RELEASE: Mark last release requirement as done.
1169
1170 * Makefile (realclean, distclean): Remove docs.
1171
1172 * erc.texi: Take care of all pre-5.1 items.
1173
1174 * erc-backend.el (erc-server-send, erc-server-send-queue): Wrap
1175 `process-send-string' in `condition-case' to avoid an error when
1176 quitting ERC.
1177
1178 * erc-stamp.el (erc-insert-timestamp-right): Try to deal with
1179 variable-width characters in the timestamp and on the same line.
1180 The latter is a kludge, but it seems to work with most of the
1181 input I've thrown at it so far. It's certainly better than going
1182 past the end of line consistently when we have variable-width
1183 characters on the same line. When `erc-timestamp-intangible' is
1184 non-nil, add intangible properties to the whitespace as well, so
1185 that hitting <end> does what you'd expect.
1186
1187 * erc.el (erc-flood-protect, erc-toggle-flood-control): Update
1188 this to only use boolean values for `erc-flood-protect'. Update
1189 documentation.
1190 (erc-cmd-QUIT): Set the active buffer to be the server buffer, so
1191 that any QUIT-related messages go there.
1192 (erc): Try to be more clever about re-using channel buffers when
1193 automatically re-connecting. Thanks to e1f for noticing.
1194
11952006-01-23 Michael Olson <mwolson@gnu.org>
1196
1197 * ChangeLog.2005: Remove erroneous line.
1198
1199 * FOR-RELEASE: Make that the Makefile tweaking is complete.
1200 (NEWS): Mark as done.
1201
1202 * Makefile (MANUAL): New option indicating the name of the manual.
1203 (PREFIX, ELISPDIR, INFODIR): New options that specify the
1204 directories to install lisp code and info manuals to. PREFIX is
1205 used only by ELISPDIR and INFODIR.
1206 (all): Call `lisp' and create the manual.
1207 (lisp): Compile lisp code.
1208 (%.info, %.html): New rules that make Info files and HTML files,
1209 respectively, from a TexInfo source.
1210 (doc): Create both the Info and HTML versions of the manual. This
1211 is for the user -- we never call it automatically.
1212 (install-info): Install Info files.
1213 (install-bin): Install compiled and source Lisp files.
1214 (todo): Remove, since it seems pointless.
1215
1216 * NEWS: Update.
1217
1218 * README: Add Installation instructions. Tweak layout.
1219
1220 * erc.texi: Work on some pre-5.1 items.
1221
1222 * erc-stamp.el, erc-track.el: Move some functions and options in
1223 order to get rid of a few compiler warnings.
1224
1225 * erc.el (erc-modules): Enable readonly by default. This will
1226 prevent new users from accidentally removing old messages, which
1227 could be disconcerting. Also enable stamp by default, since
1228 timestamps are a fairly standard feature among IRC clients.
1229
1230 * erc-button.el: Munge whitespace.
1231
1232 * erc-identd.el (erc-identd-start): Instead of throwing an error,
1233 just try to use the obsolete function.
1234
12352006-01-22 Michael Olson <mwolson@gnu.org>
1236
1237 * erc-backend.el (erc-decode-string-from-target): Make sure that
1238 we have a string as an argument. If not, coerce it to the empty
1239 string. Hopefully, this will work painlessly around an edge case
1240 related to quitting ERC around the same time a message comes in.
1241
12422006-01-22 Johan Bockgård <bojohan@users.sourceforge.net>
1243
1244 * erc-track.el: Use `(eval-when-compile (require 'cl))' (for
1245 `case'). Doc fixes.
1246 (erc-find-parsed-property): Simplify.
1247 (erc-track-get-active-buffer): Fix logic. Simplify.
1248 (erc-track-switch-buffer): Remove unused variable `dir'. Simplify.
1249
1250 * erc-speak.el: Doc fixes.
1251 (erc-speak-region): `propertize' --> `erc-propertize'.
1252
1253 * erc-dcc.el (erc-dcc-chat-parse-output): `propertize' -->
1254 `erc-propertize'.
1255
1256 * erc-button.el (erc-button-add-button): Take erc-fill-prefix into
1257 account when wrapping URLs.
1258
1259 * erc-bbdb.el (erc-bbdb-elide-display): Doc fix.
1260
1261 * erc-backend.el (define-erc-response-handler): Doc fix.
1262
12632006-01-22 Michael Olson <mwolson@gnu.org>
1264
1265 * erc.el (erc-update-modules): Use `require' instead of `load',
1266 but prevent it from causing errors, in order to preserve the
1267 previous behavior.
1268
12692006-01-21 Michael Olson <mwolson@gnu.org>
1270
1271 * FOR-RELEASE (Source): Mark cl task as done.
1272
1273 * Makefile (erc-auto.el): Call erc-generate-autoloads rather than
1274 generate-autoloads.
1275 (erc-auto.el, %.elc): Don't show command, just its output.
1276
1277 * NEWS: Add items from 2005-01-01 to 2005-08-13.
1278
1279 * debian/copyright (Copyright): Update.
1280
1281 * erc-auto.in (erc-generate-autoloads): Rename from
1282 generate-autoloads.
1283
1284 * erc.el, erc-autoaway.el, erc-backend.el: Use
1285 erc-server-process-alive instead of erc-process-alive.
1286
1287 * erc.el, erc-backend.el, erc-ezbounce.el, erc-list.el,
1288 erc-log.el, erc-match.el, erc-nets.el, erc-netsplit.el,
1289 erc-nicklist.el, erc-nickserv.el, erc-notify.el, erc-pcomplete.el:
1290 Use (eval-when-compile (require 'cl)), so that compilation doesn't
1291 fail.
1292
1293 * erc-fill.el, erc-truncate.el: Whitespace munging.
1294
1295 * erc.el: Update copyright notice. Remove eval-after-load code.
1296 (erc-with-buffer): Docfix.
1297 (erc-once-with-server-event, erc-once-with-server-event-global)
1298 (erc-with-buffer, erc-with-all-buffers-of-server): Use erc-gensym
1299 instead of gensym.
1300 (erc-banlist-update): Use erc-delete-if instead of delete-if.
1301 (erc): Call `erc-update-modules' here.
1302
1303 * erc-backend.el: Require 'erc-compat to minimize compiler
1304 warnings.
1305 (erc-decode-parsed-server-response): Docfix.
1306 (erc-server-process-alive): Move here from erc.el and rename from
1307 `erc-process-alive'.
1308 (erc-server-send, erc-remove-channel-users): Make sure process is
1309 alive before sending data to it.
1310
1311 * erc-bbdb.el: Update copyright years.
1312 (erc-bbdb-whois): Remove overexuberant comment.
1313
1314 * erc-button.el: Require erc-fill, since we make liberal use of
1315 `erc-fill-column'.
1316
1317 * erc-compat.el (erc-const-expr-p, erc-list*, erc-assert): New
1318 functions, the latter of which provides an `assert' equivalent.
1319 (erc-remove-if-not): New function that provides a simple
1320 implementation of `remove-if-not'.
1321 (erc-gensym): New function that provides a simple implementation
1322 of `gensym'.
1323 (erc-delete-if): New function that provides a simple
1324 implementation of `delete-if'.
1325 (erc-member-if): New function that provides a simple
1326 implementation of `member-if'.
1327 (field-end): Remove this, since it is unused, and later versions
1328 of XEmacs have this function already.
1329 (erc-function-arglist): Moved here from erc.el.
1330 (erc-delete-dups): New compatibility function for dealing with
1331 XEmacs.
1332 (erc-subseq): New function copied from cl-extra.el.
1333
1334 * erc-dcc.el: Require pcomplete during compilation to avoid
1335 compiler warnings.
1336 (erc-unpack-int, erc-dcc-send-filter)
1337 (erc-dcc-get-filter): Use erc-assert instead of assert.
1338 (pcomplete/erc-mode/DCC): Use erc-remove-if-not instead of
1339 remove-if-not.
1340
1341 * erc-match.el (erc-log-matches): Fix compiler warning.
1342
1343 * erc-nicklist.el: Update copyright notice.
1344 (erc-nicklist-menu): Change use of caadr to (car (cadr ...)).
1345 (erc-nicklist-bitlbee-connected-p): Remove.
1346 (erc-nicklist-insert-medium-name-or-icon): Accept channel
1347 argument. Use it to determine whether we are on bitlbee. Now
1348 that bitlbee names its channel "&bitlbee", this is trivial.
1349 (erc-nicklist-insert-contents): Pass channel as specified above.
1350 Don't try to determine whether we are on bitlbee here.
1351 (erc-nicklist-channel-users-info): Use erc-remove-if-not instead
1352 of remove-if-not.
1353 (erc-nicklist-search-for-nick): Use erc-member-if instead of
1354 member-if.
1355
1356 * erc-notify.el (erc-notify-QUIT): Use erc-delete-if with a
1357 partially-evaluated lambda expression instead of `delete' and
1358 `find'.
1359
1360 * erc-track.el: Use erc-assert.
1361 (erc-track-modified-channels): Remove use of `return'.
1362 (erc-track-modified-channels): Use `cadr' instead of `second',
1363 since otherwise we would need yet another eval-when-compile line.
1364
13652006-01-19 Michael Olson <mwolson@gnu.org>
1366
1367 * erc-backend.el (erc-process-sentinel-1): Remove attempt to
1368 detect SIGPIPE, since it doesn't work.
1369
13702006-01-10 Diane Murray <disumu@x3y2z1.net>
1371
1372 * erc-spelling.el: Updated copyright years.
1373 (define-erc-module): Enable/disable `flyspell-mode' for all open
1374 ERC buffers as well.
1375 (erc-spelling-dictionaries): Reworded customize description.
1376
1377 * erc.el (erc-command-symbol): New function.
1378 (erc-extract-command-from-line): Use `erc-command-symbol'. This
1379 fixes a bug where "Symbol's function definition is void:
1380 erc-cmd-LIST" would be shown after typing /list at the prompt (the
1381 command was interned because erc-menu.el uses it and is enabled by
1382 default whereas erc-list.el is not).
1383
1384 * NEWS: Started a list of renamed variables.
1385
1386 * erc.el: Reworded the message sent when defining variable
1387 aliases.
1388 (erc-command-indicator-face): Doc fix.
1389 (erc-modules): Enable the match module by default which makes
1390 current nickname highlighting on as the default.
1391
1392 * erc-button.el: Updated copyright years.
1393 (erc-button): New face.
1394 (erc-button-face): Use `erc-button'.
1395 (erc-button-nickname-face): New customizable variable.
1396 (erc-button-add-nickname-buttons, erc-button-add-buttons-1): Send
1397 new argument to `erc-button-add-button'.
1398 (erc-button-add-button): Doc fix. Added new argument to function
1399 definition, NICK-P. If it's a nickname, use
1400 `erc-button-nickname-face', otherwise use `erc-button-face'. This
1401 makes channel tracking and buttons work better together when
1402 `erc-button-buttonize-nicks' is enabled, since there is a nickname
1403 on just about every line.
1404
1405 * erc-track.el (erc-track-use-faces): Doc fix.
1406 (erc-track-faces-priority-list): Added `erc-button' to list.
1407 (erc-track-priority-faces-only): Doc fix.
1408
14092006-01-09 Diane Murray <disumu@x3y2z1.net>
1410
1411 * erc-button.el (erc-button-url-regexp): Use `concat' so the
1412 regexp is not one long line.
1413 (erc-button-alist): Fixed so that customizing works correctly.
1414 Reorganized. Removed lambda functions with more than two lines.
1415 Doc fix.
1416 (erc-button-describe-symbol, erc-button-beats-to-time): New
1417 functions. Moved from `erc-button-alist'.
1418
14192006-01-07 Michael Olson <mwolson@gnu.org>
1420
1421 * erc-backend.el (erc-process-sentinel-1): Don't try to re-open a
1422 process if a SIGPIPE occurs. This happens when a new message
1423 comes in at the same time a /quit is requested.
1424 (erc-process-sentinel): Use string-match rather than string= to do
1425 these comparisons. Matching literal newlines makes me nervous.
1426
1427 * erc-track.el (erc-track-remove-from-mode-line): Handle case
1428 where global-mode-string is not a list. Emacs22 permits this.
1429
1430
1431See ChangeLog.05 for earlier changes.
1432
1433 Copyright (C) 2006, 2007 Free Software Foundation, Inc.
1434
1435 This file is part of GNU Emacs.
1436
1437 GNU Emacs is free software; you can redistribute it and/or modify
1438 it under the terms of the GNU General Public License as published by
1439 the Free Software Foundation; either version 2, or (at your option)
1440 any later version.
1441
1442 GNU Emacs is distributed in the hope that it will be useful,
1443 but WITHOUT ANY WARRANTY; without even the implied warranty of
1444 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1445 GNU General Public License for more details.
1446
1447 You should have received a copy of the GNU General Public License
1448 along with GNU Emacs; see the file COPYING. If not, write to the
1449 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
1450 Boston, MA 02110-1301, USA.
1451
1452;; Local Variables:
1453;; coding: utf-8
1454;; add-log-time-zone-rule: t
1455;; End:
1456
1457;; arch-tag: 865a75f6-2bcb-46df-bf0c-b514dadf688a
diff --git a/lisp/erc/erc-autoaway.el b/lisp/erc/erc-autoaway.el
index 9d90d0ae5e9..91a1150802b 100644
--- a/lisp/erc/erc-autoaway.el
+++ b/lisp/erc/erc-autoaway.el
@@ -40,6 +40,49 @@ yourself back when you type something."
40 "The Emacs idletimer. 40 "The Emacs idletimer.
41This is only used when `erc-autoaway-idle-method' is set to 'emacs.") 41This is only used when `erc-autoaway-idle-method' is set to 'emacs.")
42 42
43(defvar erc-autoaway-last-sent-time (erc-current-time)
44 "The last time the user sent something.")
45
46(defvar erc-autoaway-caused-away nil
47 "Indicates whether this module was responsible for setting the
48user's away status.")
49
50(eval-when-compile (defvar erc-autoaway-idle-seconds))
51
52(defun erc-autoaway-reestablish-idletimer ()
53 "Reestablish the Emacs idletimer.
54If `erc-autoaway-idle-method' is 'emacs, you must call this
55function each time you change `erc-autoaway-idle-seconds'."
56 (interactive)
57 (when erc-autoaway-idletimer
58 (erc-cancel-timer erc-autoaway-idletimer))
59 (setq erc-autoaway-idletimer
60 (run-with-idle-timer erc-autoaway-idle-seconds
61 t
62 'erc-autoaway-set-away
63 erc-autoaway-idle-seconds)))
64
65(defun erc-autoaway-some-server-buffer ()
66 "Return some ERC server buffer if its connection is alive.
67If none is found, return nil."
68 (car (erc-buffer-list #'erc-open-server-buffer-p)))
69
70(defun erc-autoaway-insinuate-maybe (&optional server &rest ignored)
71 "Add autoaway reset function to `post-command-hook' if at least one
72ERC process is alive.
73
74This is used when `erc-autoaway-idle-method' is 'user."
75 (when (or server (erc-autoaway-some-server-buffer))
76 (add-hook 'post-command-hook 'erc-autoaway-reset-idle-user)))
77
78(defun erc-autoaway-remove-maybe (&rest ignored)
79 "Remove the autoaway reset function from `post-command-hook' if
80no ERC process is alive.
81
82This is used when `erc-autoaway-idle-method' is 'user."
83 (unless (erc-autoaway-some-server-buffer)
84 (remove-hook 'post-command-hook 'erc-autoaway-reset-idle-user)))
85
43;;;###autoload (autoload 'erc-autoaway-mode "erc-autoaway") 86;;;###autoload (autoload 'erc-autoaway-mode "erc-autoaway")
44(define-erc-module autoaway nil 87(define-erc-module autoaway nil
45 "In ERC autoaway mode, you can be set away automatically. 88 "In ERC autoaway mode, you can be set away automatically.
@@ -65,24 +108,31 @@ set you no longer away.
65Related variables: `erc-public-away-p' and `erc-away-nickname'." 108Related variables: `erc-public-away-p' and `erc-away-nickname'."
66 ;; Enable: 109 ;; Enable:
67 ((when (boundp 'erc-autoaway-idle-method) 110 ((when (boundp 'erc-autoaway-idle-method)
111 (add-hook 'erc-connect-pre-hook 'erc-autoaway-reset-indicators)
112 (setq erc-autoaway-last-sent-time (erc-current-time))
68 (cond 113 (cond
69 ((eq erc-autoaway-idle-method 'irc) 114 ((eq erc-autoaway-idle-method 'irc)
70 (add-hook 'erc-send-completed-hook 'erc-autoaway-reset-idle-irc) 115 (add-hook 'erc-send-completed-hook 'erc-autoaway-reset-idle-irc)
71 (add-hook 'erc-server-001-functions 'erc-autoaway-reset-idle-irc)) 116 (add-hook 'erc-server-001-functions 'erc-autoaway-reset-idle-irc))
72 ((eq erc-autoaway-idle-method 'user) 117 ((eq erc-autoaway-idle-method 'user)
73 (add-hook 'post-command-hook 'erc-autoaway-reset-idle-user)) 118 (add-hook 'erc-after-connect 'erc-autoaway-insinuate-maybe)
119 (add-hook 'erc-disconnected-hook 'erc-autoaway-remove-maybe)
120 (erc-autoaway-insinuate-maybe))
74 ((eq erc-autoaway-idle-method 'emacs) 121 ((eq erc-autoaway-idle-method 'emacs)
75 (erc-autoaway-reestablish-idletimer))) 122 (erc-autoaway-reestablish-idletimer)))
76 (add-hook 'erc-timer-hook 'erc-autoaway-possibly-set-away) 123 (add-hook 'erc-timer-hook 'erc-autoaway-possibly-set-away)
77 (add-hook 'erc-server-305-functions 'erc-autoaway-reset-indicators))) 124 (add-hook 'erc-server-305-functions 'erc-autoaway-reset-indicators)))
78 ;; Disable: 125 ;; Disable:
79 ((when (boundp 'erc-autoaway-idle-method) 126 ((when (boundp 'erc-autoaway-idle-method)
127 (remove-hook 'erc-connect-pre-hook 'erc-autoaway-reset-indicators)
80 (cond 128 (cond
81 ((eq erc-autoaway-idle-method 'irc) 129 ((eq erc-autoaway-idle-method 'irc)
82 (remove-hook 'erc-send-completed-hook 'erc-autoaway-reset-idle-irc) 130 (remove-hook 'erc-send-completed-hook 'erc-autoaway-reset-idle-irc)
83 (remove-hook 'erc-server-001-functions 'erc-autoaway-reset-idle-irc)) 131 (remove-hook 'erc-server-001-functions 'erc-autoaway-reset-idle-irc))
84 ((eq erc-autoaway-idle-method 'user) 132 ((eq erc-autoaway-idle-method 'user)
85 (remove-hook 'post-command-hook 'erc-autoaway-reset-idle-user)) 133 (remove-hook 'post-command-hook 'erc-autoaway-reset-idle-user)
134 (remove-hook 'erc-after-connect 'erc-autoaway-insinuate-maybe)
135 (remove-hook 'erc-disconnected-hook 'erc-autoaway-remove-maybe))
86 ((eq erc-autoaway-idle-method 'emacs) 136 ((eq erc-autoaway-idle-method 'emacs)
87 (erc-cancel-timer erc-autoaway-idletimer) 137 (erc-cancel-timer erc-autoaway-idletimer)
88 (setq erc-autoaway-idletimer nil))) 138 (setq erc-autoaway-idletimer nil)))
@@ -104,9 +154,12 @@ definitions of being idle."
104 (const :tag "Emacs idle time" emacs) 154 (const :tag "Emacs idle time" emacs)
105 (const :tag "Last IRC action" irc)) 155 (const :tag "Last IRC action" irc))
106 :set (lambda (sym val) 156 :set (lambda (sym val)
107 (erc-autoaway-disable) 157 (if erc-autoaway-mode
108 (set-default sym val) 158 (progn
109 (erc-autoaway-enable))) 159 (erc-autoaway-disable)
160 (set sym val)
161 (erc-autoaway-enable))
162 (set sym val))))
110 163
111(defcustom erc-auto-set-away t 164(defcustom erc-auto-set-away t
112 "*If non-nil, set away after `erc-autoaway-idle-seconds' seconds of idling. 165 "*If non-nil, set away after `erc-autoaway-idle-seconds' seconds of idling.
@@ -133,21 +186,6 @@ See `erc-auto-discard-away'."
133 :group 'erc-autoaway 186 :group 'erc-autoaway
134 :type 'regexp) 187 :type 'regexp)
135 188
136(eval-when-compile (defvar erc-autoaway-idle-seconds))
137
138(defun erc-autoaway-reestablish-idletimer ()
139 "Reestablish the Emacs idletimer.
140If `erc-autoaway-idle-method' is 'emacs, you must call this
141function each time you change `erc-autoaway-idle-seconds'."
142 (interactive)
143 (when erc-autoaway-idletimer
144 (erc-cancel-timer erc-autoaway-idletimer))
145 (setq erc-autoaway-idletimer
146 (run-with-idle-timer erc-autoaway-idle-seconds
147 t
148 'erc-autoaway-set-away
149 erc-autoaway-idle-seconds)))
150
151(defcustom erc-autoaway-idle-seconds 1800 189(defcustom erc-autoaway-idle-seconds 1800
152 "*Number of seconds after which ERC will set you automatically away. 190 "*Number of seconds after which ERC will set you automatically away.
153If you are changing this variable using lisp instead of customizing it, 191If you are changing this variable using lisp instead of customizing it,
@@ -167,19 +205,12 @@ in seconds."
167 :group 'erc-autoaway 205 :group 'erc-autoaway
168 :type 'string) 206 :type 'string)
169 207
170(defvar erc-autoaway-last-sent-time (erc-current-time)
171 "The last time the user sent something.")
172
173(defvar erc-autoaway-caused-away nil
174 "Indicates whether this module was responsible for setting the
175user's away status.")
176
177(defun erc-autoaway-reset-idle-user (&rest stuff) 208(defun erc-autoaway-reset-idle-user (&rest stuff)
178 "Reset the stored user idle time. 209 "Reset the stored user idle time.
179This is one global variable since a user talking on one net can 210This is one global variable since a user talking on one net can
180talk on another net too." 211talk on another net too."
181 (when erc-auto-discard-away 212 (when erc-auto-discard-away
182 (erc-autoaway-set-back)) 213 (erc-autoaway-set-back #'erc-autoaway-remove-maybe))
183 (setq erc-autoaway-last-sent-time (erc-current-time))) 214 (setq erc-autoaway-last-sent-time (erc-current-time)))
184 215
185(defun erc-autoaway-reset-idle-irc (line &rest stuff) 216(defun erc-autoaway-reset-idle-irc (line &rest stuff)
@@ -192,12 +223,24 @@ talk on another net too."
192 (erc-autoaway-set-back)) 223 (erc-autoaway-set-back))
193 (setq erc-autoaway-last-sent-time (erc-current-time))) 224 (setq erc-autoaway-last-sent-time (erc-current-time)))
194 225
195(defun erc-autoaway-set-back () 226(defun erc-autoaway-set-back (&optional none-alive-func)
196 "Discard the away state globally." 227 "Discard the away state globally.
197 (let ((server-buffer (car (erc-buffer-list #'erc-server-buffer-p)))) 228
198 (when (and erc-autoaway-caused-away 229NONE-ALIVE-FUNC is the function to call if no ERC processes are alive."
199 (with-current-buffer server-buffer (erc-away-p))) 230 (let ((server-buffer (erc-autoaway-some-server-buffer)))
200 (erc-cmd-GAWAY "")))) 231 (if (and erc-autoaway-caused-away
232 (buffer-live-p server-buffer)
233 (with-current-buffer server-buffer erc-away))
234 (erc-cmd-GAWAY "")
235 (when none-alive-func (funcall none-alive-func)))))
236
237(defun erc-autoaway-some-open-server-buffer ()
238 "Return some ERC server buffer if its connection is alive and the
239user is not away.
240If none is found, return nil."
241 (car (erc-buffer-list (lambda ()
242 (and (erc-open-server-buffer-p)
243 (not erc-away))))))
201 244
202(defun erc-autoaway-possibly-set-away (current-time) 245(defun erc-autoaway-possibly-set-away (current-time)
203 "Set autoaway when `erc-auto-set-away' is true and the idletime is 246 "Set autoaway when `erc-auto-set-away' is true and the idletime is
@@ -207,7 +250,7 @@ exceeds `erc-autoaway-idle-seconds'."
207 ;; whenever the server sends something to the client. 250 ;; whenever the server sends something to the client.
208 (when (and erc-auto-set-away 251 (when (and erc-auto-set-away
209 (not erc-autoaway-caused-away) 252 (not erc-autoaway-caused-away)
210 (not (erc-away-p))) 253 (erc-autoaway-some-open-server-buffer))
211 (let ((idle-time (erc-time-diff erc-autoaway-last-sent-time 254 (let ((idle-time (erc-time-diff erc-autoaway-last-sent-time
212 current-time))) 255 current-time)))
213 (when (>= idle-time erc-autoaway-idle-seconds) 256 (when (>= idle-time erc-autoaway-idle-seconds)
@@ -215,15 +258,17 @@ exceeds `erc-autoaway-idle-seconds'."
215 nil 'notice nil 258 nil 'notice nil
216 (format "Setting automatically away after %i seconds of idle-time" 259 (format "Setting automatically away after %i seconds of idle-time"
217 idle-time)) 260 idle-time))
218 (erc-autoaway-set-away idle-time))))) 261 (erc-autoaway-set-away idle-time t)))))
262
263(defun erc-autoaway-set-away (idle-time &optional notest)
264 "Set the away state globally.
219 265
220(defun erc-autoaway-set-away (idle-time) 266If NOTEST is specified, do not check to see whether there is an
221 "Set the away state globally." 267activer server buffer available."
222 ;; Note that the idle timer runs, even when Emacs is inactive. In 268 ;; Note that the idle timer runs, even when Emacs is inactive. In
223 ;; order to prevent flooding when we connect, we test for an 269 ;; order to prevent flooding when we connect, we test for an
224 ;; existing process. 270 ;; existing process.
225 (when (and (erc-server-process-alive) 271 (when (or notest (erc-autoaway-some-open-server-buffer))
226 (not (erc-away-p)))
227 (setq erc-autoaway-caused-away t) 272 (setq erc-autoaway-caused-away t)
228 (erc-cmd-GAWAY (format erc-autoaway-message idle-time)))) 273 (erc-cmd-GAWAY (format erc-autoaway-message idle-time))))
229 274
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index fbe6f22e1d6..08cb738d360 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -174,9 +174,15 @@ WALLCHOPS - supports sending messages to all operators in a channel")
174 174
175;;; Server and connection state 175;;; Server and connection state
176 176
177(defvar erc-server-ping-timer-alist nil
178 "Mapping of server buffers to their specific ping timer.")
179
177(defvar erc-server-connected nil 180(defvar erc-server-connected nil
178 "Non-nil if the `current-buffer' is associated with an open IRC connection. 181 "Non-nil if the current buffer has been used by ERC to establish
179This variable is buffer-local.") 182an IRC connection.
183
184If you wish to determine whether an IRC connection is currently
185active, use the `erc-server-process-alive' function instead.")
180(make-variable-buffer-local 'erc-server-connected) 186(make-variable-buffer-local 'erc-server-connected)
181 187
182(defvar erc-server-reconnect-count 0 188(defvar erc-server-reconnect-count 0
@@ -187,10 +193,23 @@ This variable is buffer-local.")
187 "Non-nil if the user requests a quit.") 193 "Non-nil if the user requests a quit.")
188(make-variable-buffer-local 'erc-server-quitting) 194(make-variable-buffer-local 'erc-server-quitting)
189 195
196(defvar erc-server-reconnecting nil
197 "Non-nil if the user requests an explicit reconnect, and the
198current IRC process is still alive.")
199(make-variable-buffer-local 'erc-server-reconnecting)
200
201(defvar erc-server-timed-out nil
202 "Non-nil if the IRC server failed to respond to a ping.")
203(make-variable-buffer-local 'erc-server-timed-out)
204
190(defvar erc-server-banned nil 205(defvar erc-server-banned nil
191 "Non-nil if the user is denied access because of a server ban.") 206 "Non-nil if the user is denied access because of a server ban.")
192(make-variable-buffer-local 'erc-server-banned) 207(make-variable-buffer-local 'erc-server-banned)
193 208
209(defvar erc-server-error-occurred nil
210 "Non-nil if the user triggers some server error.")
211(make-variable-buffer-local 'erc-server-error-occurred)
212
194(defvar erc-server-lines-sent nil 213(defvar erc-server-lines-sent nil
195 "Line counter.") 214 "Line counter.")
196(make-variable-buffer-local 'erc-server-lines-sent) 215(make-variable-buffer-local 'erc-server-lines-sent)
@@ -210,6 +229,11 @@ This is useful for flood protection.")
210This is useful for flood protection.") 229This is useful for flood protection.")
211(make-variable-buffer-local 'erc-server-last-ping-time) 230(make-variable-buffer-local 'erc-server-last-ping-time)
212 231
232(defvar erc-server-last-received-time nil
233 "Time the last message was received from the server.
234This is useful for detecting hung connections.")
235(make-variable-buffer-local 'erc-server-last-received-time)
236
213(defvar erc-server-lag nil 237(defvar erc-server-lag nil
214 "Calculated server lag time in seconds. 238 "Calculated server lag time in seconds.
215This variable is only set in a server buffer.") 239This variable is only set in a server buffer.")
@@ -387,11 +411,24 @@ protection algorithm."
387 411
388;; Ping handling 412;; Ping handling
389 413
390(defcustom erc-server-send-ping-interval 90 414(defcustom erc-server-send-ping-interval 30
391 "*Interval of sending pings to the server, in seconds. 415 "*Interval of sending pings to the server, in seconds.
392If this is set to nil, pinging the server is disabled." 416If this is set to nil, pinging the server is disabled."
393 :group 'erc-server 417 :group 'erc-server
394 :type '(choice (const nil) (integer :tag "Seconds"))) 418 :type '(choice (const :tag "Disabled" nil)
419 (integer :tag "Seconds")))
420
421(defcustom erc-server-send-ping-timeout 120
422 "*If the time between ping and response is greater than this, reconnect.
423The time is in seconds.
424
425This must be greater than or equal to the value for
426`erc-server-send-ping-interval'.
427
428If this is set to nil, never try to reconnect."
429 :group 'erc-server
430 :type '(choice (const :tag "Disabled" nil)
431 (integer :tag "Seconds")))
395 432
396(defvar erc-server-ping-handler nil 433(defvar erc-server-ping-handler nil
397 "This variable holds the periodic ping timer.") 434 "This variable holds the periodic ping timer.")
@@ -424,20 +461,40 @@ Currently this is called by `erc-send-input'."
424 (upcase-word 1) 461 (upcase-word 1)
425 (buffer-string))) 462 (buffer-string)))
426 463
427(defun erc-server-setup-periodical-server-ping (&rest ignore) 464(defun erc-server-send-ping (buf)
428 "Set up a timer to periodically ping the current server." 465 "Send a ping to the IRC server buffer in BUF.
429 (and erc-server-ping-handler (erc-cancel-timer erc-server-ping-handler)) 466Additionally, detect whether the IRC process has hung."
430 (when erc-server-send-ping-interval 467 (if (buffer-live-p buf)
431 (setq erc-server-ping-handler 468 (with-current-buffer buf
432 (run-with-timer 469 (if (and erc-server-send-ping-timeout
433 4 erc-server-send-ping-interval 470 (>
434 (lambda (buf) 471 (erc-time-diff (erc-current-time)
435 (when (buffer-live-p buf) 472 erc-server-last-received-time)
436 (with-current-buffer buf 473 erc-server-send-ping-timeout))
437 (erc-server-send 474 (progn
438 (format "PING %.0f" 475 ;; if the process is hung, kill it
439 (erc-current-time)))))) 476 (setq erc-server-timed-out t)
440 (current-buffer))))) 477 (delete-process erc-server-process))
478 (erc-server-send (format "PING %.0f" (erc-current-time)))))
479 ;; remove timer if the server buffer has been killed
480 (let ((timer (assq buf erc-server-ping-timer-alist)))
481 (when timer
482 (erc-cancel-timer (cdr timer))
483 (setcdr timer nil)))))
484
485(defun erc-server-setup-periodical-ping (buffer)
486 "Set up a timer to periodically ping the current server.
487The current buffer is given by BUFFER."
488 (with-current-buffer buffer
489 (and erc-server-ping-handler (erc-cancel-timer erc-server-ping-handler))
490 (when erc-server-send-ping-interval
491 (setq erc-server-ping-handler (run-with-timer
492 4 erc-server-send-ping-interval
493 #'erc-server-send-ping
494 buffer))
495 (setq erc-server-ping-timer-alist (cons (cons buffer
496 erc-server-ping-handler)
497 erc-server-ping-timer-alist)))))
441 498
442(defun erc-server-process-alive () 499(defun erc-server-process-alive ()
443 "Return non-nil when `erc-server-process' is open or running." 500 "Return non-nil when `erc-server-process' is open or running."
@@ -447,40 +504,47 @@ Currently this is called by `erc-send-input'."
447 504
448;;;; Connecting to a server 505;;;; Connecting to a server
449 506
450(defun erc-server-connect (server port) 507(defun erc-server-connect (server port buffer)
451 "Perform the connection and login. 508 "Perform the connection and login using the specified SERVER and PORT.
452We will store server variables in the current buffer." 509We will store server variables in the buffer given by BUFFER."
453 (let ((msg (erc-format-message 'connect ?S server ?p port))) 510 (let ((msg (erc-format-message 'connect ?S server ?p port)))
454 (message "%s" msg) 511 (message "%s" msg)
455 (setq erc-server-process 512 (let ((process (funcall erc-server-connect-function
456 (funcall erc-server-connect-function 513 (format "erc-%s-%s" server port)
457 (format "erc-%s-%s" server port) 514 nil server port)))
458 (current-buffer) server port)) 515 (message "%s...done" msg)
459 (message "%s...done" msg)) 516 ;; Misc server variables
460 ;; Misc server variables 517 (with-current-buffer buffer
461 (setq erc-server-quitting nil) 518 (setq erc-server-process process)
462 (setq erc-server-banned nil) 519 (setq erc-server-quitting nil)
463 (setq erc-server-last-sent-time (erc-current-time)) 520 (setq erc-server-reconnecting nil)
464 (setq erc-server-last-ping-time (erc-current-time)) 521 (setq erc-server-timed-out nil)
465 (setq erc-server-lines-sent 0) 522 (setq erc-server-banned nil)
466 ;; last peers (sender and receiver) 523 (setq erc-server-error-occurred nil)
467 (setq erc-server-last-peers '(nil . nil)) 524 (let ((time (erc-current-time)))
468 ;; process handlers 525 (setq erc-server-last-sent-time time)
469 (set-process-sentinel erc-server-process 'erc-process-sentinel) 526 (setq erc-server-last-ping-time time)
470 (set-process-filter erc-server-process 'erc-server-filter-function) 527 (setq erc-server-last-received-time time))
471 ;; we do our own encoding and decoding 528 (setq erc-server-lines-sent 0)
472 (when (fboundp 'set-process-coding-system) 529 ;; last peers (sender and receiver)
473 (set-process-coding-system erc-server-process 'raw-text)) 530 (setq erc-server-last-peers '(nil . nil)))
474 (set-marker (process-mark erc-server-process) (point)) 531 ;; we do our own encoding and decoding
532 (when (fboundp 'set-process-coding-system)
533 (set-process-coding-system process 'raw-text))
534 ;; process handlers
535 (set-process-sentinel process 'erc-process-sentinel)
536 (set-process-filter process 'erc-server-filter-function)
537 (set-process-buffer process buffer)))
475 (erc-log "\n\n\n********************************************\n") 538 (erc-log "\n\n\n********************************************\n")
476 (message (erc-format-message 'login ?n (erc-current-nick))) 539 (message (erc-format-message
540 'login ?n
541 (with-current-buffer buffer (erc-current-nick))))
477 ;; wait with script loading until we receive a confirmation (first 542 ;; wait with script loading until we receive a confirmation (first
478 ;; MOTD line) 543 ;; MOTD line)
479 (if (eq erc-server-connect-function 'open-network-stream-nowait) 544 (if (eq erc-server-connect-function 'open-network-stream-nowait)
480 ;; it's a bit unclear otherwise that it's attempting to establish a 545 ;; it's a bit unclear otherwise that it's attempting to establish a
481 ;; connection 546 ;; connection
482 (erc-display-message nil nil (current-buffer) 547 (erc-display-message nil nil buffer "Opening connection..\n")
483 "Opening connection..\n")
484 (erc-login))) 548 (erc-login)))
485 549
486(defun erc-server-reconnect () 550(defun erc-server-reconnect ()
@@ -501,6 +565,7 @@ Make sure you are in an ERC buffer when running this."
501(defun erc-server-filter-function (process string) 565(defun erc-server-filter-function (process string)
502 "The process filter for the ERC server." 566 "The process filter for the ERC server."
503 (with-current-buffer (process-buffer process) 567 (with-current-buffer (process-buffer process)
568 (setq erc-server-last-received-time (erc-current-time))
504 ;; If you think this is written in a weird way - please refer to the 569 ;; If you think this is written in a weird way - please refer to the
505 ;; docstring of `erc-server-processing-p' 570 ;; docstring of `erc-server-processing-p'
506 (if erc-server-processing-p 571 (if erc-server-processing-p
@@ -529,16 +594,20 @@ Make sure you are in an ERC buffer when running this."
529(defsubst erc-server-reconnect-p (event) 594(defsubst erc-server-reconnect-p (event)
530 "Return non-nil if ERC should attempt to reconnect automatically. 595 "Return non-nil if ERC should attempt to reconnect automatically.
531EVENT is the message received from the closed connection process." 596EVENT is the message received from the closed connection process."
532 (and erc-server-auto-reconnect 597 (or erc-server-reconnecting
533 (not erc-server-banned) 598 (and erc-server-auto-reconnect
534 ;; make sure we don't infinitely try to reconnect, unless the 599 (not erc-server-banned)
535 ;; user wants that 600 (not erc-server-error-occurred)
536 (or (eq erc-server-reconnect-attempts t) 601 ;; make sure we don't infinitely try to reconnect, unless the
537 (and (integerp erc-server-reconnect-attempts) 602 ;; user wants that
538 (< erc-server-reconnect-count erc-server-reconnect-attempts))) 603 (or (eq erc-server-reconnect-attempts t)
539 (not (string-match "^deleted" event)) 604 (and (integerp erc-server-reconnect-attempts)
540 ;; open-network-stream-nowait error for connection refused 605 (< erc-server-reconnect-count
541 (not (string-match "^failed with code 111" event)))) 606 erc-server-reconnect-attempts)))
607 (or erc-server-timed-out
608 (not (string-match "^deleted" event)))
609 ;; open-network-stream-nowait error for connection refused
610 (not (string-match "^failed with code 111" event)))))
542 611
543(defun erc-process-sentinel-1 (event) 612(defun erc-process-sentinel-1 (event)
544 "Called when `erc-process-sentinel' has decided that we're disconnecting. 613 "Called when `erc-process-sentinel' has decided that we're disconnecting.
@@ -562,6 +631,7 @@ Conditionally try to reconnect and take appropriate action."
562 (if (erc-server-reconnect-p event) 631 (if (erc-server-reconnect-p event)
563 (condition-case err 632 (condition-case err
564 (progn 633 (progn
634 (setq erc-server-reconnecting nil)
565 (erc-server-reconnect) 635 (erc-server-reconnect)
566 (setq erc-server-reconnect-count 0)) 636 (setq erc-server-reconnect-count 0))
567 (error (when (integerp erc-server-reconnect-attempts) 637 (error (when (integerp erc-server-reconnect-attempts)
@@ -611,6 +681,7 @@ Conditionally try to reconnect and take appropriate action."
611 "Return the coding system or cons cell appropriate for TARGET. 681 "Return the coding system or cons cell appropriate for TARGET.
612This is determined via `erc-encoding-coding-alist' or 682This is determined via `erc-encoding-coding-alist' or
613`erc-server-coding-system'." 683`erc-server-coding-system'."
684 (unless target (setq target (erc-default-target)))
614 (or (when target 685 (or (when target
615 (let ((case-fold-search t)) 686 (let ((case-fold-search t))
616 (catch 'match 687 (catch 'match
@@ -656,14 +727,11 @@ See `erc-server-flood-margin' for an explanation of the flood
656protection algorithm." 727protection algorithm."
657 (erc-log (concat "erc-server-send: " string "(" (buffer-name) ")")) 728 (erc-log (concat "erc-server-send: " string "(" (buffer-name) ")"))
658 (setq erc-server-last-sent-time (erc-current-time)) 729 (setq erc-server-last-sent-time (erc-current-time))
659 (let ((buf (erc-server-buffer)) 730 (let ((encoding (erc-coding-system-for-target target)))
660 (encoding (erc-coding-system-for-target
661 (or target (erc-default-target)))))
662 (when (consp encoding) 731 (when (consp encoding)
663 (setq encoding (car encoding))) 732 (setq encoding (car encoding)))
664 (if (and buf 733 (if (erc-server-process-alive)
665 (erc-server-process-alive)) 734 (erc-with-server-buffer
666 (with-current-buffer buf
667 (let ((str (concat string "\r\n"))) 735 (let ((str (concat string "\r\n")))
668 (if forcep 736 (if forcep
669 (progn 737 (progn
@@ -903,10 +971,8 @@ Finds hooks by looking in the `erc-server-responses' hashtable."
903 (let ((hook (or (erc-get-hook (erc-response.command message)) 971 (let ((hook (or (erc-get-hook (erc-response.command message))
904 'erc-default-server-functions))) 972 'erc-default-server-functions)))
905 (run-hook-with-args-until-success hook process message) 973 (run-hook-with-args-until-success hook process message)
906 (let ((server-buffer (erc-server-buffer))) 974 (erc-with-server-buffer
907 (when (buffer-live-p server-buffer) 975 (run-hook-with-args 'erc-timer-hook (erc-current-time)))))
908 (with-current-buffer server-buffer
909 (run-hook-with-args 'erc-timer-hook (erc-current-time)))))))
910 976
911(add-hook 'erc-default-server-functions 'erc-handle-unknown-server-response) 977(add-hook 'erc-default-server-functions 'erc-handle-unknown-server-response)
912 978
@@ -1062,6 +1128,7 @@ add things to `%s' instead."
1062 1128
1063(define-erc-response-handler (ERROR) 1129(define-erc-response-handler (ERROR)
1064 "Handle an ERROR command from the server." nil 1130 "Handle an ERROR command from the server." nil
1131 (setq erc-server-error-occurred t)
1065 (erc-display-message 1132 (erc-display-message
1066 parsed 'error nil 'ERROR 1133 parsed 'error nil 'ERROR
1067 ?s (erc-response.sender parsed) ?c (erc-response.contents parsed))) 1134 ?s (erc-response.sender parsed) ?c (erc-response.contents parsed)))
@@ -1446,6 +1513,9 @@ A server may send more than one 005 message."
1446See `erc-display-server-message'." nil 1513See `erc-display-server-message'." nil
1447 (erc-display-server-message proc parsed)) 1514 (erc-display-server-message proc parsed))
1448 1515
1516(define-erc-response-handler (290)
1517 "Handle dancer-ircd CAPAB messages." nil nil)
1518
1449(define-erc-response-handler (301) 1519(define-erc-response-handler (301)
1450 "AWAY notice." nil 1520 "AWAY notice." nil
1451 (erc-display-message parsed 'notice 'active 's301 1521 (erc-display-message parsed 'notice 'active 's301
diff --git a/lisp/erc/erc-button.el b/lisp/erc/erc-button.el
index 1fd224fb956..435c72bba23 100644
--- a/lisp/erc/erc-button.el
+++ b/lisp/erc/erc-button.el
@@ -56,10 +56,12 @@
56 "This mode buttonizes all messages according to `erc-button-alist'." 56 "This mode buttonizes all messages according to `erc-button-alist'."
57 ((add-hook 'erc-insert-modify-hook 'erc-button-add-buttons 'append) 57 ((add-hook 'erc-insert-modify-hook 'erc-button-add-buttons 'append)
58 (add-hook 'erc-send-modify-hook 'erc-button-add-buttons 'append) 58 (add-hook 'erc-send-modify-hook 'erc-button-add-buttons 'append)
59 (add-hook 'erc-complete-functions 'erc-button-next)) 59 (add-hook 'erc-complete-functions 'erc-button-next)
60 (add-hook 'erc-mode-hook 'erc-button-add-keys))
60 ((remove-hook 'erc-insert-modify-hook 'erc-button-add-buttons) 61 ((remove-hook 'erc-insert-modify-hook 'erc-button-add-buttons)
61 (remove-hook 'erc-send-modify-hook 'erc-button-add-buttons) 62 (remove-hook 'erc-send-modify-hook 'erc-button-add-buttons)
62 (remove-hook 'erc-complete-functions 'erc-button-next))) 63 (remove-hook 'erc-complete-functions 'erc-button-next)
64 (remove-hook 'erc-mode-hook 'erc-button-add-keys)))
63 65
64;; Make XEmacs use `erc-button-face'. 66;; Make XEmacs use `erc-button-face'.
65(when (featurep 'xemacs) 67(when (featurep 'xemacs)
@@ -241,6 +243,16 @@ PAR is a number of a regexp grouping whose text will be passed to
241This syntax table should make all the legal nick characters word 243This syntax table should make all the legal nick characters word
242constituents.") 244constituents.")
243 245
246(defvar erc-button-keys-added nil
247 "Internal variable used to keep track of whether we've added the
248global-level ERC button keys yet.")
249
250(defun erc-button-add-keys ()
251 "Add ERC mode-level button movement keys. This is only done once."
252 (unless erc-button-keys-added
253 (define-key erc-mode-map (kbd "<backtab>") 'erc-button-previous)
254 (setq erc-button-keys-added t)))
255
244(defun erc-button-add-buttons () 256(defun erc-button-add-buttons ()
245 "Find external references in the current buffer and make buttons of them. 257 "Find external references in the current buffer and make buttons of them.
246\"External references\" are things like URLs, as 258\"External references\" are things like URLs, as
diff --git a/lisp/erc/erc-capab.el b/lisp/erc/erc-capab.el
index 268c4bfe68a..b7ccade02e0 100644
--- a/lisp/erc/erc-capab.el
+++ b/lisp/erc/erc-capab.el
@@ -56,8 +56,10 @@
56;; (erc-capab-identify-mode 1) 56;; (erc-capab-identify-mode 1)
57 57
58;; `erc-capab-identify-prefix' will now be added to the beginning of 58;; `erc-capab-identify-prefix' will now be added to the beginning of
59;; unidentified users' nicknames. The default is an asterisk, "*". If 59;; unidentified users' nicknames. The default is an asterisk, "*".
60;; the value of this variable is nil or you disable this module (see 60;; You can customize the prefix and the face used to display it,
61;; `erc-capab-identify-unidentified'. If the value of
62;; `erc-capab-identify-prefix' is nil or you disable this module (see
61;; `erc-capab-identify-disable'), no prefix will be inserted, but the 63;; `erc-capab-identify-disable'), no prefix will be inserted, but the
62;; flag sent by the server will still be stripped. 64;; flag sent by the server will still be stripped.
63 65
@@ -73,14 +75,19 @@
73 :group 'erc) 75 :group 'erc)
74 76
75(defcustom erc-capab-identify-prefix "*" 77(defcustom erc-capab-identify-prefix "*"
76 "The prefix used for unidentified users." 78 "The prefix used for unidentified users.
79
80If you change this from the default \"*\", be sure to use a
81character not found in IRC nicknames to avoid confusion."
77 :group 'erc-capab 82 :group 'erc-capab
78 :type '(choice string (const nil))) 83 :type '(choice string (const nil)))
79 84
80;;; Define module: 85(defface erc-capab-identify-unidentified '((t)) ; same as `erc-default-face'
86 "Face to use for `erc-capab-identify-prefix'."
87 :group 'erc-capab
88 :group 'erc-faces)
81 89
82(define-erc-response-handler (290) 90;;; Define module:
83 "Handle dancer-ircd CAPAB messages." nil nil)
84 91
85;;;###autoload (autoload 'erc-capab-identify-mode "erc-capab" nil t) 92;;;###autoload (autoload 'erc-capab-identify-mode "erc-capab" nil t)
86(define-erc-module capab-identify nil 93(define-erc-module capab-identify nil
@@ -124,9 +131,9 @@ Optional argument PARSED is the current message, a response struct.
124These arguments are sent to this function when called as a hook in 131These arguments are sent to this function when called as a hook in
125`erc-server-005-functions'." 132`erc-server-005-functions'."
126 (unless erc-capab-identify-sent 133 (unless erc-capab-identify-sent
127 (erc-capab-send-identify-messages))) 134 (erc-capab-identify-send-messages)))
128 135
129(defun erc-capab-send-identify-messages () 136(defun erc-capab-identify-send-messages ()
130 "Send CAPAB IDENTIFY messages if the server supports it." 137 "Send CAPAB IDENTIFY messages if the server supports it."
131 (when (and (stringp erc-server-version) 138 (when (and (stringp erc-server-version)
132 (string-match "^\\(dancer-ircd\\|hyperion\\)" erc-server-version) 139 (string-match "^\\(dancer-ircd\\|hyperion\\)" erc-server-version)
@@ -175,7 +182,7 @@ PARSED is an `erc-parsed' response struct."
175 (when (and erc-capab-identify-prefix 182 (when (and erc-capab-identify-prefix
176 (erc-with-server-buffer erc-capab-identify-activated)) 183 (erc-with-server-buffer erc-capab-identify-activated))
177 (goto-char (or (erc-find-parsed-property) (point-min))) 184 (goto-char (or (erc-find-parsed-property) (point-min)))
178 (let ((nickname (erc-capab-get-unidentified-nickname 185 (let ((nickname (erc-capab-identify-get-unidentified-nickname
179 (erc-get-parsed-vector (point))))) 186 (erc-get-parsed-vector (point)))))
180 (when (and nickname 187 (when (and nickname
181 (goto-char (point-min)) 188 (goto-char (point-min))
@@ -183,10 +190,9 @@ PARSED is an `erc-parsed' response struct."
183 (re-search-forward (regexp-quote nickname) nil t)) 190 (re-search-forward (regexp-quote nickname) nil t))
184 (goto-char (match-beginning 0)) 191 (goto-char (match-beginning 0))
185 (insert (erc-propertize erc-capab-identify-prefix 192 (insert (erc-propertize erc-capab-identify-prefix
186 'face (get-char-property (- (point) 1) 193 'face 'erc-capab-identify-unidentified))))))
187 'face)))))))
188 194
189(defun erc-capab-get-unidentified-nickname (parsed) 195(defun erc-capab-identify-get-unidentified-nickname (parsed)
190 "Return the nickname of the user if unidentified. 196 "Return the nickname of the user if unidentified.
191PARSED is an `erc-parsed' response struct." 197PARSED is an `erc-parsed' response struct."
192 (when (and (erc-response-p parsed) 198 (when (and (erc-response-p parsed)
diff --git a/lisp/erc/erc-compat.el b/lisp/erc/erc-compat.el
index 60cbe992d19..dcfcfe84c98 100644
--- a/lisp/erc/erc-compat.el
+++ b/lisp/erc/erc-compat.el
@@ -161,14 +161,6 @@ avoid corrupting the original SEQ."
161 (setq newseq (cons el newseq)))) 161 (setq newseq (cons el newseq))))
162 (nreverse newseq))) 162 (nreverse newseq)))
163 163
164;; Provide a simpler replacement for `gensym'.
165(defvar *erc-sym-counter* 0)
166(defun erc-gensym ()
167 "Generate a new uninterned symbol."
168 (let ((num (prog1 *erc-sym-counter*
169 (setq *erc-sym-counter* (1+ *erc-sym-counter*)))))
170 (make-symbol (format "*erc-sym-%d*" num))))
171
172;; Copied from cl-extra.el 164;; Copied from cl-extra.el
173(defun erc-subseq (seq start &optional end) 165(defun erc-subseq (seq start &optional end)
174 "Return the subsequence of SEQ from START to END. 166 "Return the subsequence of SEQ from START to END.
diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el
index 26ca86f04c6..fc1c71babdf 100644
--- a/lisp/erc/erc-fill.el
+++ b/lisp/erc/erc-fill.el
@@ -1,6 +1,7 @@
1;;; erc-fill.el --- Filling IRC messages in various ways 1;;; erc-fill.el --- Filling IRC messages in various ways
2 2
3;; Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. 3;; Copyright (C) 2001, 2002, 2003, 2004, 2006,
4;; 2007 Free Software Foundation, Inc.
4 5
5;; Author: Andreas Fuchs <asf@void.at> 6;; Author: Andreas Fuchs <asf@void.at>
6;; Mario Lang <mlang@delysid.org> 7;; Mario Lang <mlang@delysid.org>
@@ -187,14 +188,6 @@ You can put this on `erc-insert-modify-hook' and/or `erc-send-modify-hook'."
187 (length (format-time-string erc-timestamp-format)) 188 (length (format-time-string erc-timestamp-format))
188 0)) 189 0))
189 190
190(defun erc-restore-text-properties ()
191 "Restore the property 'erc-parsed for the region."
192 (let* ((parsed-posn (text-property-not-all (point-min) (point-max)
193 'erc-parsed nil))
194 (parsed-prop (when parsed-posn
195 (get-text-property parsed-posn 'erc-parsed))))
196 (put-text-property (point-min) (point-max) 'erc-parsed parsed-prop)))
197
198(provide 'erc-fill) 191(provide 'erc-fill)
199 192
200;;; erc-fill.el ends here 193;;; erc-fill.el ends here
diff --git a/lisp/erc/erc-ibuffer.el b/lisp/erc/erc-ibuffer.el
index 5266d837d64..25ad1319bd6 100644
--- a/lisp/erc/erc-ibuffer.el
+++ b/lisp/erc/erc-ibuffer.el
@@ -127,8 +127,7 @@
127(define-ibuffer-column erc-away (:name "A") 127(define-ibuffer-column erc-away (:name "A")
128 (if (and erc-server-process 128 (if (and erc-server-process
129 (processp erc-server-process) 129 (processp erc-server-process)
130 (with-current-buffer (process-buffer erc-server-process) 130 (erc-away-time))
131 erc-away))
132 "A" 131 "A"
133 " ")) 132 " "))
134 133
diff --git a/lisp/erc/erc-identd.el b/lisp/erc/erc-identd.el
index c7f7c615e92..8a70a743edb 100644
--- a/lisp/erc/erc-identd.el
+++ b/lisp/erc/erc-identd.el
@@ -42,12 +42,26 @@
42 42
43(defvar erc-identd-process nil) 43(defvar erc-identd-process nil)
44 44
45(defgroup erc-identd nil
46 "Run a local identd server."
47 :group 'erc)
48
49(defcustom erc-identd-port 8113
50 "Port to run the identd server on if not specified in the argument for
51`erc-identd-start'.
52
53This can be either a string or a number."
54 :group 'erc-identd
55 :type '(choice (const :tag "None" nil)
56 (integer :tag "Port number")
57 (string :tag "Port string")))
58
45;;;###autoload (autoload 'erc-identd-mode "erc-identd") 59;;;###autoload (autoload 'erc-identd-mode "erc-identd")
46(define-erc-module identd nil 60(define-erc-module identd nil
47 "This mode launches an identd server on port 8113." 61 "This mode launches an identd server on port 8113."
48 ((add-hook 'erc-connect-pre-hook 'erc-identd-start) 62 ((add-hook 'erc-connect-pre-hook 'erc-identd-quickstart)
49 (add-hook 'erc-disconnected-hook 'erc-identd-stop)) 63 (add-hook 'erc-disconnected-hook 'erc-identd-stop))
50 ((remove-hook 'erc-connect-pre-hook 'erc-identd-start) 64 ((remove-hook 'erc-connect-pre-hook 'erc-identd-quickstart)
51 (remove-hook 'erc-disconnected-hook 'erc-identd-stop))) 65 (remove-hook 'erc-disconnected-hook 'erc-identd-stop)))
52 66
53(defun erc-identd-filter (proc string) 67(defun erc-identd-filter (proc string)
@@ -71,12 +85,11 @@ run from inetd. The idea is to provide a simple identd server
71when you need one, without having to install one globally on your 85when you need one, without having to install one globally on your
72system." 86system."
73 (interactive (list (read-string "Serve identd requests on port: " "8113"))) 87 (interactive (list (read-string "Serve identd requests on port: " "8113")))
74 (if (null port) 88 (unless port (setq port erc-identd-port))
75 (setq port 8113) 89 (when (stringp port)
76 (if (stringp port) 90 (setq port (string-to-number port)))
77 (setq port (string-to-number port)))) 91 (when erc-identd-process
78 (if erc-identd-process 92 (delete-process erc-identd-process))
79 (delete-process erc-identd-process))
80 (setq erc-identd-process 93 (setq erc-identd-process
81 (make-network-process :name "identd" 94 (make-network-process :name "identd"
82 :buffer nil 95 :buffer nil
@@ -85,6 +98,11 @@ system."
85 :filter 'erc-identd-filter)) 98 :filter 'erc-identd-filter))
86 (set-process-query-on-exit-flag erc-identd-process nil)) 99 (set-process-query-on-exit-flag erc-identd-process nil))
87 100
101(defun erc-identd-quickstart (&rest ignored)
102 "Start the identd server with the default port.
103The default port is specified by `erc-identd-port'."
104 (erc-identd-start))
105
88;;;###autoload 106;;;###autoload
89(defun erc-identd-stop (&rest ignore) 107(defun erc-identd-stop (&rest ignore)
90 (interactive) 108 (interactive)
diff --git a/lisp/erc/erc-log.el b/lisp/erc/erc-log.el
index 22c9b3622d3..9801192bca0 100644
--- a/lisp/erc/erc-log.el
+++ b/lisp/erc/erc-log.el
@@ -85,7 +85,9 @@
85;;; Code: 85;;; Code:
86 86
87(require 'erc) 87(require 'erc)
88(eval-when-compile (require 'cl)) 88(eval-when-compile
89 (require 'erc-networks)
90 (require 'cl))
89 91
90(defgroup erc-log nil 92(defgroup erc-log nil
91 "Logging facilities for ERC." 93 "Logging facilities for ERC."
@@ -100,10 +102,12 @@ NICK is the current nick,
100SERVER and PORT are the parameters used to connect BUFFERs 102SERVER and PORT are the parameters used to connect BUFFERs
101`erc-server-process'." 103`erc-server-process'."
102 :group 'erc-log 104 :group 'erc-log
103 :type '(choice (const erc-generate-log-file-name-long) 105 :type '(choice (const :tag "Long style" erc-generate-log-file-name-long)
104 (const erc-generate-log-file-name-short) 106 (const :tag "Long, but with network name rather than server"
105 (const erc-generate-log-file-name-with-date) 107 erc-generate-log-file-name-network)
106 (symbol))) 108 (const :tag "Short" erc-generate-log-file-name-short)
109 (const :tag "With date" erc-generate-log-file-name-with-date)
110 (symbol :tag "Other function")))
107 111
108(defcustom erc-truncate-buffer-on-save nil 112(defcustom erc-truncate-buffer-on-save nil
109 "Truncate any ERC (channel, query, server) buffer when it is saved." 113 "Truncate any ERC (channel, query, server) buffer when it is saved."
@@ -197,7 +201,7 @@ also be a predicate function. To only log when you are not set away, use:
197\(setq erc-enable-logging 201\(setq erc-enable-logging
198 (lambda (buffer) 202 (lambda (buffer)
199 (with-current-buffer buffer 203 (with-current-buffer buffer
200 (not erc-away))))" 204 (null (erc-away-time)))))"
201 ;; enable 205 ;; enable
202 ((when erc-log-write-after-insert 206 ((when erc-log-write-after-insert
203 (add-hook 'erc-insert-post-hook 'erc-save-buffer-in-logs)) 207 (add-hook 'erc-insert-post-hook 'erc-save-buffer-in-logs))
@@ -211,8 +215,7 @@ also be a predicate function. To only log when you are not set away, use:
211 ;; append, so that 'erc-initialize-log-marker runs first 215 ;; append, so that 'erc-initialize-log-marker runs first
212 (add-hook 'erc-connect-pre-hook 'erc-log-setup-logging 'append) 216 (add-hook 'erc-connect-pre-hook 'erc-log-setup-logging 'append)
213 (dolist (buffer (erc-buffer-list)) 217 (dolist (buffer (erc-buffer-list))
214 (when (buffer-live-p buffer) 218 (erc-log-setup-logging buffer)))
215 (with-current-buffer buffer (erc-log-setup-logging)))))
216 ;; disable 219 ;; disable
217 ((remove-hook 'erc-insert-post-hook 'erc-save-buffer-in-logs) 220 ((remove-hook 'erc-insert-post-hook 'erc-save-buffer-in-logs)
218 (remove-hook 'erc-send-post-hook 'erc-save-buffer-in-logs) 221 (remove-hook 'erc-send-post-hook 'erc-save-buffer-in-logs)
@@ -223,30 +226,38 @@ also be a predicate function. To only log when you are not set away, use:
223 (remove-hook 'erc-part-hook 'erc-conditional-save-buffer) 226 (remove-hook 'erc-part-hook 'erc-conditional-save-buffer)
224 (remove-hook 'erc-connect-pre-hook 'erc-log-setup-logging) 227 (remove-hook 'erc-connect-pre-hook 'erc-log-setup-logging)
225 (dolist (buffer (erc-buffer-list)) 228 (dolist (buffer (erc-buffer-list))
226 (when (buffer-live-p buffer) 229 (erc-log-disable-logging buffer))))
227 (with-current-buffer buffer (erc-log-disable-logging))))))
228 230
229(define-key erc-mode-map "\C-c\C-l" 'erc-save-buffer-in-logs) 231(define-key erc-mode-map "\C-c\C-l" 'erc-save-buffer-in-logs)
230 232
231;;; functionality referenced from erc.el 233;;; functionality referenced from erc.el
232(defun erc-log-setup-logging () 234(defun erc-log-setup-logging (buffer)
233 "Setup the buffer-local logging variables in the current buffer. 235 "Setup the buffer-local logging variables in the current buffer.
234This function is destined to be run from `erc-connect-pre-hook'." 236This function is destined to be run from `erc-connect-pre-hook'.
235 (when (erc-logging-enabled) 237The current buffer is given by BUFFER."
236 (auto-save-mode -1) 238 (when (erc-logging-enabled buffer)
237 (setq buffer-file-name nil) 239 (with-current-buffer buffer
238 (set (make-local-variable 'write-file-functions) 240 (auto-save-mode -1)
239 '(erc-save-buffer-in-logs)) 241 (setq buffer-file-name nil)
240 (when erc-log-insert-log-on-open 242 (cond ((boundp 'write-file-functions)
241 (ignore-errors (insert-file-contents (erc-current-logfile)) 243 (set (make-local-variable 'write-file-functions)
242 (move-marker erc-last-saved-position 244 '(erc-save-buffer-in-logs)))
243 (1- (point-max))))))) 245 ((boundp 'local-write-file-hooks)
244 246 (setq local-write-file-hooks '(erc-save-buffer-in-logs)))
245(defun erc-log-disable-logging () 247 (t
246 "Disable logging in the current buffer." 248 (set (make-local-variable 'write-file-hooks)
247 (when (erc-logging-enabled) 249 '(erc-save-buffer-in-logs))))
248 (setq buffer-offer-save nil 250 (when erc-log-insert-log-on-open
249 erc-enable-logging nil))) 251 (ignore-errors (insert-file-contents (erc-current-logfile))
252 (move-marker erc-last-saved-position
253 (1- (point-max))))))))
254
255(defun erc-log-disable-logging (buffer)
256 "Disable logging in BUFFER."
257 (when (erc-logging-enabled buffer)
258 (with-current-buffer buffer
259 (setq buffer-offer-save nil
260 erc-enable-logging nil))))
250 261
251(defun erc-log-all-but-server-buffers (buffer) 262(defun erc-log-all-but-server-buffers (buffer)
252 "Returns t if logging should be enabled in BUFFER. 263 "Returns t if logging should be enabled in BUFFER.
@@ -340,6 +351,19 @@ This function is a possible value for `erc-generate-log-file-name-function'."
340 ;; we need a make-safe-file-name function. 351 ;; we need a make-safe-file-name function.
341 (convert-standard-filename file))) 352 (convert-standard-filename file)))
342 353
354(defun erc-generate-log-file-name-network (buffer target nick server port)
355 "Generates a log-file name using the network name rather than server name.
356This results in a file name of the form #channel!nick@network.txt.
357This function is a possible value for `erc-generate-log-file-name-function'."
358 (require 'erc-networks)
359 (let ((file (concat
360 (if target (concat target "!"))
361 nick "@"
362 (or (with-current-buffer buffer (erc-network-name)) server)
363 ".txt")))
364 ;; we need a make-safe-file-name function.
365 (convert-standard-filename file)))
366
343;;;###autoload 367;;;###autoload
344(defun erc-save-buffer-in-logs (&optional buffer) 368(defun erc-save-buffer-in-logs (&optional buffer)
345 "Append BUFFER contents to the log file, if logging is enabled. 369 "Append BUFFER contents to the log file, if logging is enabled.
diff --git a/lisp/erc/erc-match.el b/lisp/erc/erc-match.el
index 50e4cfbc521..35ba1b13492 100644
--- a/lisp/erc/erc-match.el
+++ b/lisp/erc/erc-match.el
@@ -1,6 +1,7 @@
1;;; erc-match.el --- Highlight messages matching certain regexps 1;;; erc-match.el --- Highlight messages matching certain regexps
2 2
3;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. 3;; Copyright (C) 2002, 2003, 2004, 2005, 2006,
4;; 2007 Free Software Foundation, Inc.
4 5
5;; Author: Andreas Fuchs <asf@void.at> 6;; Author: Andreas Fuchs <asf@void.at>
6;; Keywords: comm, faces 7;; Keywords: comm, faces
@@ -540,7 +541,7 @@ deactivate/activate match logging in the latter. See
540 (when (and 541 (when (and
541 (or (eq erc-log-matches-flag t) 542 (or (eq erc-log-matches-flag t)
542 (and (eq erc-log-matches-flag 'away) 543 (and (eq erc-log-matches-flag 'away)
543 erc-away)) 544 (erc-away-time)))
544 match-buffer-name) 545 match-buffer-name)
545 (let ((line (format-spec erc-log-match-format 546 (let ((line (format-spec erc-log-match-format
546 (format-spec-make 547 (format-spec-make
@@ -572,7 +573,7 @@ deactivate/activate match logging in the latter. See
572 573
573(defun erc-log-matches-come-back (proc parsed) 574(defun erc-log-matches-come-back (proc parsed)
574 "Display a notice that messages were logged while away." 575 "Display a notice that messages were logged while away."
575 (when (and erc-away 576 (when (and (erc-away-time)
576 (eq erc-log-matches-flag 'away)) 577 (eq erc-log-matches-flag 'away))
577 (mapc 578 (mapc
578 (lambda (match-type) 579 (lambda (match-type)
@@ -583,7 +584,7 @@ deactivate/activate match logging in the latter. See
583 (with-current-buffer buffer 584 (with-current-buffer buffer
584 (get-text-property (1- (point-max)) 585 (get-text-property (1- (point-max))
585 'timestamp)))) 586 'timestamp))))
586 (away-time (erc-emacs-time-to-erc-time erc-away))) 587 (away-time (erc-emacs-time-to-erc-time (erc-away-time))))
587 (when (and away-time last-msg-time 588 (when (and away-time last-msg-time
588 (erc-time-gt last-msg-time away-time)) 589 (erc-time-gt last-msg-time away-time))
589 (erc-display-message 590 (erc-display-message
diff --git a/lisp/erc/erc-menu.el b/lisp/erc/erc-menu.el
index a5826625bde..888da702d62 100644
--- a/lisp/erc/erc-menu.el
+++ b/lisp/erc/erc-menu.el
@@ -1,6 +1,7 @@
1;; erc-menu.el -- Menu-bar definitions for ERC 1;; erc-menu.el -- Menu-bar definitions for ERC
2 2
3;; Copyright (C) 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. 3;; Copyright (C) 2001, 2002, 2004, 2005, 2006,
4;; 2007 Free Software Foundation, Inc.
4 5
5;; Author: Mario Lang <mlang@delysid.org> 6;; Author: Mario Lang <mlang@delysid.org>
6;; Keywords: comm, processes, menu 7;; Keywords: comm, processes, menu
@@ -75,8 +76,8 @@
75 (erc-channel-user-op-p (erc-current-nick))] 76 (erc-channel-user-op-p (erc-current-nick))]
76 ["Set a key..." erc-set-channel-key 77 ["Set a key..." erc-set-channel-key
77 (erc-channel-user-op-p (erc-current-nick))]) 78 (erc-channel-user-op-p (erc-current-nick))])
78 ["Leave this channel..." erc-part-from-channel erc-channel-users] 79 ["Leave this channel..." erc-part-from-channel erc-channel-users])
79 "-") 80 "-"
80 (list "Pals, fools and other keywords" 81 (list "Pals, fools and other keywords"
81 ["Add pal..." erc-add-pal] 82 ["Add pal..." erc-add-pal]
82 ["Delete pal..." erc-delete-pal] 83 ["Delete pal..." erc-delete-pal]
diff --git a/lisp/erc/erc-netsplit.el b/lisp/erc/erc-netsplit.el
index 567c91cc075..b4c26b1bb88 100644
--- a/lisp/erc/erc-netsplit.el
+++ b/lisp/erc/erc-netsplit.el
@@ -184,7 +184,7 @@ join from that split has been detected or not.")
184;;;###autoload 184;;;###autoload
185(defun erc-cmd-WHOLEFT () 185(defun erc-cmd-WHOLEFT ()
186 "Show who's gone." 186 "Show who's gone."
187 (with-current-buffer (erc-server-buffer) 187 (erc-with-server-buffer
188 (if (null erc-netsplit-list) 188 (if (null erc-netsplit-list)
189 (erc-display-message 189 (erc-display-message
190 nil 'notice 'active 190 nil 'notice 'active
diff --git a/lisp/erc/erc-networks.el b/lisp/erc/erc-networks.el
index 9f8c5528d04..4631ceae3ae 100644
--- a/lisp/erc/erc-networks.el
+++ b/lisp/erc/erc-networks.el
@@ -317,6 +317,7 @@
317 ("Novernet: Random server" Novernet "irc.novernet.com" ((6665 6669) 7000 )) 317 ("Novernet: Random server" Novernet "irc.novernet.com" ((6665 6669) 7000 ))
318 ("Nullrouted: Random server" Nullrouted "irc.nullrouted.org" ((6666 6669) 7000 )) 318 ("Nullrouted: Random server" Nullrouted "irc.nullrouted.org" ((6666 6669) 7000 ))
319 ("NullusNet: Random server" NullusNet "irc.nullus.net" 6667) 319 ("NullusNet: Random server" NullusNet "irc.nullus.net" 6667)
320 ("OFTC: Random server" OFTC "irc.oftc.net" ((6667 6670) 7000))
320 ("OpChat: Random server" OpChat "irc.opchat.org" ((6667 6669))) 321 ("OpChat: Random server" OpChat "irc.opchat.org" ((6667 6669)))
321 ("Othernet: Random server" Othernet "irc.othernet.org" 6667) 322 ("Othernet: Random server" Othernet "irc.othernet.org" 6667)
322 ("Othernet: US, FL, Miami" Othernet "miami.fl.us.othernet.org" 6667) 323 ("Othernet: US, FL, Miami" Othernet "miami.fl.us.othernet.org" 6667)
@@ -611,6 +612,7 @@ PORTS is either a number, a list of numbers, or a list of port ranges."
611 (Novernet "novernet.com") 612 (Novernet "novernet.com")
612 (Nullrouted "nullrouted.org") 613 (Nullrouted "nullrouted.org")
613 (NullusNet "nullus.net") 614 (NullusNet "nullus.net")
615 (OFTC "oftc.net")
614 (OpChat "opchat.org") 616 (OpChat "opchat.org")
615 (Openprojects "openprojects.net") 617 (Openprojects "openprojects.net")
616 (Othernet "othernet.org") 618 (Othernet "othernet.org")
@@ -737,12 +739,12 @@ search for a match in `erc-networks-alist'."
737 739
738(defun erc-network () 740(defun erc-network ()
739 "Return the value of `erc-network' for the current server." 741 "Return the value of `erc-network' for the current server."
740 (with-current-buffer (erc-server-buffer) erc-network)) 742 (erc-with-server-buffer erc-network))
741 743
742(defun erc-current-network () 744(defun erc-current-network ()
743 "Deprecated. Use `erc-network' instead. Return the name of this server's 745 "Deprecated. Use `erc-network' instead. Return the name of this server's
744network as a symbol." 746network as a symbol."
745 (with-current-buffer (erc-server-buffer) 747 (erc-with-server-buffer
746 (intern (downcase (symbol-name erc-network))))) 748 (intern (downcase (symbol-name erc-network)))))
747 749
748(erc-make-obsolete 'erc-current-network 'erc-network 750(erc-make-obsolete 'erc-current-network 'erc-network
@@ -750,7 +752,7 @@ network as a symbol."
750 752
751(defun erc-network-name () 753(defun erc-network-name ()
752 "Returns the name of the current network as a string." 754 "Returns the name of the current network as a string."
753 (with-current-buffer (erc-server-buffer) (symbol-name erc-network))) 755 (erc-with-server-buffer (symbol-name erc-network)))
754 756
755(defun erc-set-network-name (proc parsed) 757(defun erc-set-network-name (proc parsed)
756 "Set `erc-network' to the value returned by `erc-determine-network'." 758 "Set `erc-network' to the value returned by `erc-determine-network'."
diff --git a/lisp/erc/erc-notify.el b/lisp/erc/erc-notify.el
index 82784c624c0..d34e38ade43 100644
--- a/lisp/erc/erc-notify.el
+++ b/lisp/erc/erc-notify.el
@@ -121,8 +121,7 @@ changes."
121 (ison-list (delete "" (split-string 121 (ison-list (delete "" (split-string
122 (erc-response.contents parsed)))) 122 (erc-response.contents parsed))))
123 (new-list ison-list) 123 (new-list ison-list)
124 (old-list (with-current-buffer (erc-server-buffer) 124 (old-list (erc-with-server-buffer erc-last-ison)))
125 erc-last-ison)))
126 (while new-list 125 (while new-list
127 (when (not (erc-member-ignore-case (car new-list) old-list)) 126 (when (not (erc-member-ignore-case (car new-list) old-list))
128 (run-hook-with-args 'erc-notify-signon-hook server (car new-list)) 127 (run-hook-with-args 'erc-notify-signon-hook server (car new-list))
@@ -204,7 +203,7 @@ with args, toggle notify status of people."
204 (cond 203 (cond
205 ((null args) 204 ((null args)
206 ;; Print current notificated people (online) 205 ;; Print current notificated people (online)
207 (let ((ison (with-current-buffer (erc-server-buffer) erc-last-ison))) 206 (let ((ison (erc-with-server-buffer erc-last-ison)))
208 (if (not ison) 207 (if (not ison)
209 (erc-display-message 208 (erc-display-message
210 nil 'notice 'active "No ison-list yet!") 209 nil 'notice 'active "No ison-list yet!")
diff --git a/lisp/erc/erc-pcomplete.el b/lisp/erc/erc-pcomplete.el
index 951ba25898c..f207bcc1b8b 100644
--- a/lisp/erc/erc-pcomplete.el
+++ b/lisp/erc/erc-pcomplete.el
@@ -180,7 +180,7 @@ the most recent speakers are listed first."
180 (while (pcomplete-here (pcomplete-erc-nicks)))) 180 (while (pcomplete-here (pcomplete-erc-nicks))))
181 181
182(defun pcomplete/erc-mode/UNIGNORE () 182(defun pcomplete/erc-mode/UNIGNORE ()
183 (pcomplete-here (with-current-buffer (erc-server-buffer) erc-ignore-list))) 183 (pcomplete-here (erc-with-server-buffer erc-ignore-list)))
184 184
185;;; Functions that provide possible completions. 185;;; Functions that provide possible completions.
186 186
@@ -233,7 +233,7 @@ If optional argument IGNORE-SELF is non-nil, don't return the current nick."
233(defun pcomplete-erc-all-nicks (&optional postfix) 233(defun pcomplete-erc-all-nicks (&optional postfix)
234 "Returns a list of all nicks on the current server." 234 "Returns a list of all nicks on the current server."
235 (let (nicks) 235 (let (nicks)
236 (with-current-buffer (process-buffer erc-server-process) 236 (erc-with-server-buffer
237 (maphash (lambda (nick user) 237 (maphash (lambda (nick user)
238 (setq nicks (cons (concat nick postfix) nicks))) 238 (setq nicks (cons (concat nick postfix) nicks)))
239 erc-server-users)) 239 erc-server-users))
diff --git a/lisp/erc/erc-ring.el b/lisp/erc/erc-ring.el
index 911a154e915..95c313a23f6 100644
--- a/lisp/erc/erc-ring.el
+++ b/lisp/erc/erc-ring.el
@@ -1,6 +1,7 @@
1;; erc-ring.el -- Command history handling for erc using ring.el 1;; erc-ring.el -- Command history handling for erc using ring.el
2 2
3;; Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. 3;; Copyright (C) 2001, 2002, 2003, 2004, 2006,
4;; 2007 Free Software Foundation, Inc.
4 5
5;; Author: Alex Schroeder <alex@gnu.org> 6;; Author: Alex Schroeder <alex@gnu.org>
6;; Keywords: comm 7;; Keywords: comm
diff --git a/lisp/erc/erc-services.el b/lisp/erc/erc-services.el
index 5d03a7b6365..a2cc1b19782 100644
--- a/lisp/erc/erc-services.el
+++ b/lisp/erc/erc-services.el
@@ -168,15 +168,18 @@ Example of use:
168 :type '(repeat 168 :type '(repeat
169 (list :tag "Network" 169 (list :tag "Network"
170 (choice :tag "Network name" 170 (choice :tag "Network name"
171 (const freenode) 171 (const Ars)
172 (const OFTC) 172 (const Austnet)
173 (const Azzurra)
174 (const BitlBee)
175 (const BRASnet)
173 (const DALnet) 176 (const DALnet)
177 (const freenode)
174 (const GalaxyNet) 178 (const GalaxyNet)
175 (const SlashNET)
176 (const BRASnet)
177 (const iip) 179 (const iip)
178 (const Austnet) 180 (const OFTC)
179 (const Azzurra) 181 (const QuakeNet)
182 (const SlashNET)
180 (symbol :tag "Network name")) 183 (symbol :tag "Network name"))
181 (repeat :tag "Nickname and password" 184 (repeat :tag "Nickname and password"
182 (cons :tag "Identity" 185 (cons :tag "Identity"
@@ -186,68 +189,63 @@ Example of use:
186;; Variables: 189;; Variables:
187 190
188(defcustom erc-nickserv-alist 191(defcustom erc-nickserv-alist
189 '((BitlBee 192 '((Ars
190 nil 193 nil nil
191 nil 194 "Census"
195 "IDENTIFY" nil nil)
196 (Austnet
197 "NickOP!service@austnet.org"
198 "/msg\\s-NickOP@austnet.org\\s-identify\\s-<password>"
199 "nickop@austnet.org"
200 "identify" nil nil)
201 (Azzurra
202 "NickServ!service@azzurra.org"
203 "/ns\\s-IDENTIFY\\s-password"
204 "NickServ"
205 "IDENTIFY" nil nil)
206 (BitlBee
207 nil nil
192 "&bitlbee" 208 "&bitlbee"
193 "identify" 209 "identify" nil nil)
194 nil) 210 (BRASnet
211 "NickServ!services@brasnet.org"
212 "/NickServ\\s-IDENTIFY\\s-senha"
213 "NickServ"
214 "IDENTIFY" nil "")
195 (DALnet 215 (DALnet
196 "NickServ!service@dal.net" 216 "NickServ!service@dal.net"
197 "/msg\\s-NickServ@services.dal.net\\s-IDENTIFY\\s-<password>" 217 "/msg\\s-NickServ@services.dal.net\\s-IDENTIFY\\s-<password>"
198 "NickServ@services.dal.net" 218 "NickServ@services.dal.net"
199 "IDENTIFY" 219 "IDENTIFY" nil nil)
200 nil)
201 (freenode 220 (freenode
202 "NickServ!NickServ@services." 221 "NickServ!NickServ@services."
203 "/msg\\s-NickServ\\s-IDENTIFY\\s-<password>" 222 "/msg\\s-NickServ\\s-IDENTIFY\\s-<password>"
204 "NickServ" 223 "NickServ"
205 "IDENTIFY" 224 "IDENTIFY" nil nil)
206 nil)
207 (GalaxyNet 225 (GalaxyNet
208 "NS!nickserv@galaxynet.org" 226 "NS!nickserv@galaxynet.org"
209 "Please\\s-change\\s-nicks\\s-or\\s-authenticate." 227 "Please\\s-change\\s-nicks\\s-or\\s-authenticate."
210 "NS@services.galaxynet.org" 228 "NS@services.galaxynet.org"
211 "AUTH" 229 "AUTH" t nil)
212 t)
213 (SlashNET
214 "NickServ!services@services.slashnet.org"
215 "/msg\\s-NickServ\\s-IDENTIFY\\s-password"
216 "NickServ@services.slashnet.org"
217 "IDENTIFY"
218 nil)
219 (iip 230 (iip
220 "Trent@anon.iip" 231 "Trent@anon.iip"
221 "type\\s-/squery\\s-Trent\\s-identify\\s-<password>" 232 "type\\s-/squery\\s-Trent\\s-identify\\s-<password>"
222 "Trent@anon.iip" 233 "Trent@anon.iip"
223 "IDENTIFY" 234 "IDENTIFY" nil "SQUERY")
224 nil
225 "SQUERY")
226 (BRASnet
227 "NickServ!services@brasnet.org"
228 "/NickServ\\s-IDENTIFY\\s-senha"
229 "NickServ"
230 "IDENTIFY"
231 nil
232 "")
233 (Austnet
234 "NickOP!service@austnet.org"
235 "/msg\\s-NickOP@austnet.org\\s-identify\\s-<password>"
236 "nickop@austnet.org"
237 "identify"
238 nil)
239 (Azzurra
240 "NickServ!service@azzurra.org"
241 "/ns\\s-IDENTIFY\\s-password"
242 "NickServ"
243 "IDENTIFY"
244 nil)
245 (OFTC 235 (OFTC
246 "NickServ!services@services.oftc.net" 236 "NickServ!services@services.oftc.net"
247 "/msg\\s-NickServ\\s-IDENTIFY\\s-\^_password" 237 "type\\s-/msg\\s-NickServ\\s-IDENTIFY\\s-password."
248 "NickServ" 238 "NickServ"
249 "IDENTIFY" 239 "IDENTIFY" nil nil)
250 nil)) 240 (QuakeNet
241 nil nil
242 "Q@CServe.quakenet.org"
243 "auth" t nil)
244 (SlashNET
245 "NickServ!services@services.slashnet.org"
246 "/msg\\s-NickServ\\s-IDENTIFY\\s-password"
247 "NickServ@services.slashnet.org"
248 "IDENTIFY" nil nil))
251 "Alist of NickServer details, sorted by network. 249 "Alist of NickServer details, sorted by network.
252Every element in the list has the form 250Every element in the list has the form
253 \(SYMBOL NICKSERV REGEXP NICK KEYWORD USE-CURRENT ANSWER) 251 \(SYMBOL NICKSERV REGEXP NICK KEYWORD USE-CURRENT ANSWER)
@@ -265,8 +263,10 @@ ANSWER is the command to use for the answer. The default is 'privmsg.
265 :type '(repeat 263 :type '(repeat
266 (list :tag "Nickserv data" 264 (list :tag "Nickserv data"
267 (symbol :tag "Network name") 265 (symbol :tag "Network name")
268 (string :tag "Nickserv's nick!user@host") 266 (choice (string :tag "Nickserv's nick!user@host")
269 (regexp :tag "Identify request sent by Nickserv") 267 (const :tag "No message sent by Nickserv" nil))
268 (choice (regexp :tag "Identify request sent by Nickserv")
269 (const :tag "No message sent by Nickserv" nil))
270 (string :tag "Identify to") 270 (string :tag "Identify to")
271 (string :tag "Identify keyword") 271 (string :tag "Identify keyword")
272 (boolean :tag "Use current nick in identify message?") 272 (boolean :tag "Use current nick in identify message?")
diff --git a/lisp/erc/erc-speedbar.el b/lisp/erc/erc-speedbar.el
index 551b83fb5ac..0d88589838e 100644
--- a/lisp/erc/erc-speedbar.el
+++ b/lisp/erc/erc-speedbar.el
@@ -1,6 +1,7 @@
1;;; erc-speedbar.el --- Speedbar support for ERC 1;;; erc-speedbar.el --- Speedbar support for ERC
2 2
3;; Copyright (C) 2001, 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. 3;; Copyright (C) 2001, 2002, 2003, 2004, 2006,
4;; 2007 Free Software Foundation, Inc.
4 5
5;; Author: Mario Lang <mlang@delysid.org> 6;; Author: Mario Lang <mlang@delysid.org>
6;; Contributor: Eric M. Ludlam <eric@siege-engine.com> 7;; Contributor: Eric M. Ludlam <eric@siege-engine.com>
@@ -113,7 +114,7 @@ This will add a speedbar major display mode."
113 (erase-buffer) 114 (erase-buffer)
114 (let (serverp chanp queryp) 115 (let (serverp chanp queryp)
115 (with-current-buffer buffer 116 (with-current-buffer buffer
116 (setq serverp (eq buffer (process-buffer erc-server-process))) 117 (setq serverp (erc-server-buffer-p))
117 (setq chanp (erc-channel-p (erc-default-target))) 118 (setq chanp (erc-channel-p (erc-default-target)))
118 (setq queryp (erc-query-buffer-p))) 119 (setq queryp (erc-query-buffer-p)))
119 (cond (serverp 120 (cond (serverp
diff --git a/lisp/erc/erc-spelling.el b/lisp/erc/erc-spelling.el
index 484ddb36d52..a15ca17987f 100644
--- a/lisp/erc/erc-spelling.el
+++ b/lisp/erc/erc-spelling.el
@@ -41,12 +41,10 @@
41 ;; called AFTER the server buffer is initialized. 41 ;; called AFTER the server buffer is initialized.
42 ((add-hook 'erc-connect-pre-hook 'erc-spelling-init) 42 ((add-hook 'erc-connect-pre-hook 'erc-spelling-init)
43 (dolist (buffer (erc-buffer-list)) 43 (dolist (buffer (erc-buffer-list))
44 (when (buffer-live-p buffer) 44 (erc-spelling-init buffer)))
45 (with-current-buffer buffer (erc-spelling-init)))))
46 ((remove-hook 'erc-connect-pre-hook 'erc-spelling-init) 45 ((remove-hook 'erc-connect-pre-hook 'erc-spelling-init)
47 (dolist (buffer (erc-buffer-list)) 46 (dolist (buffer (erc-buffer-list))
48 (when (buffer-live-p buffer) 47 (with-current-buffer buffer (flyspell-mode 0)))))
49 (with-current-buffer buffer (flyspell-mode 0))))))
50 48
51(defcustom erc-spelling-dictionaries nil 49(defcustom erc-spelling-dictionaries nil
52 "An alist mapping buffer names to dictionaries. 50 "An alist mapping buffer names to dictionaries.
@@ -60,24 +58,22 @@ name here."
60 (string :tag "Dictionary")))) 58 (string :tag "Dictionary"))))
61 :group 'erc-spelling) 59 :group 'erc-spelling)
62 60
63(defun erc-spelling-init () 61(defun erc-spelling-init (buffer)
64 "Enable flyspell mode in an ERC buffer." 62 "Enable flyspell mode in an ERC buffer.
65 (let ((name (downcase (buffer-name))) 63The current buffer is given by BUFFER."
66 (dicts erc-spelling-dictionaries)) 64 (with-current-buffer buffer
67 (when dicts 65 (let ((name (downcase (buffer-name)))
68 (while (and dicts 66 (dicts erc-spelling-dictionaries))
69 (not (string= name (downcase (caar dicts))))) 67 (when dicts
70 (setq dicts (cdr dicts))) 68 (while (and dicts
71 (setq ispell-local-dictionary 69 (not (string= name (downcase (caar dicts)))))
72 (if dicts 70 (setq dicts (cdr dicts)))
73 (cadr (car dicts)) 71 (setq ispell-local-dictionary
74 (let ((server (erc-server-buffer))) 72 (if dicts
75 (if server 73 (cadr (car dicts))
76 (with-current-buffer server 74 (erc-with-server-buffer ispell-local-dictionary)))))
77 ispell-local-dictionary) 75 (setq flyspell-generic-check-word-p 'erc-spelling-flyspell-verify)
78 nil)))))) 76 (flyspell-mode 1)))
79 (setq flyspell-generic-check-word-p 'erc-spelling-flyspell-verify)
80 (flyspell-mode 1))
81 77
82(defun erc-spelling-unhighlight-word (word) 78(defun erc-spelling-unhighlight-word (word)
83 "Unhighlight the given WORD. 79 "Unhighlight the given WORD.
diff --git a/lisp/erc/erc-stamp.el b/lisp/erc/erc-stamp.el
index 5a9977aaead..0b8017ffe0b 100644
--- a/lisp/erc/erc-stamp.el
+++ b/lisp/erc/erc-stamp.el
@@ -147,7 +147,7 @@ or `erc-send-modify-hook'."
147 (error "Timestamp function unbound")) 147 (error "Timestamp function unbound"))
148 (when (and (fboundp erc-insert-away-timestamp-function) 148 (when (and (fboundp erc-insert-away-timestamp-function)
149 erc-away-timestamp-format 149 erc-away-timestamp-format
150 (with-current-buffer (erc-server-buffer) erc-away) 150 (erc-away-time)
151 (not erc-timestamp-format)) 151 (not erc-timestamp-format))
152 (funcall erc-insert-away-timestamp-function 152 (funcall erc-insert-away-timestamp-function
153 (erc-format-timestamp ct erc-away-timestamp-format))) 153 (erc-format-timestamp ct erc-away-timestamp-format)))
@@ -203,6 +203,7 @@ space before a right timestamp in any saved logs."
203 (s (if ignore-p (make-string len ? ) string))) 203 (s (if ignore-p (make-string len ? ) string)))
204 (unless ignore-p (setq erc-timestamp-last-inserted string)) 204 (unless ignore-p (setq erc-timestamp-last-inserted string))
205 (erc-put-text-property 0 len 'field 'erc-timestamp s) 205 (erc-put-text-property 0 len 'field 'erc-timestamp s)
206 (erc-put-text-property 0 len 'invisible 'timestamp s)
206 (insert s))) 207 (insert s)))
207 208
208(defun erc-insert-aligned (string pos) 209(defun erc-insert-aligned (string pos)
@@ -319,6 +320,21 @@ set, and timestamping is already active."
319 (setq erc-hide-timestamps nil) 320 (setq erc-hide-timestamps nil)
320 (erc-munge-invisibility-spec)) 321 (erc-munge-invisibility-spec))
321 322
323(defun erc-toggle-timestamps ()
324 "Hide or show timestamps in ERC buffers.
325
326Note that timestamps can only be shown for a message using this
327function if `erc-timestamp-format' was set and timestamping was
328enabled when the message was inserted."
329 (interactive)
330 (if erc-hide-timestamps
331 (setq erc-hide-timestamps nil)
332 (setq erc-hide-timestamps t))
333 (mapc (lambda (buffer)
334 (with-current-buffer buffer
335 (erc-munge-invisibility-spec)))
336 (erc-buffer-list)))
337
322(defun erc-echo-timestamp (before now) 338(defun erc-echo-timestamp (before now)
323 "Print timestamp text-property of an IRC message. 339 "Print timestamp text-property of an IRC message.
324Argument BEFORE is where point was before it got moved and 340Argument BEFORE is where point was before it got moved and
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el
index 0fa550a5838..4a8b673d46b 100644
--- a/lisp/erc/erc-track.el
+++ b/lisp/erc/erc-track.el
@@ -1,6 +1,7 @@
1;;; erc-track.el --- Track modified channel buffers 1;;; erc-track.el --- Track modified channel buffers
2 2
3;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. 3;; Copyright (C) 2002, 2003, 2004, 2005, 2006,
4;; 2007 Free Software Foundation, Inc.
4 5
5;; Author: Mario Lang <mlang@delysid.org> 6;; Author: Mario Lang <mlang@delysid.org>
6;; Keywords: comm, faces 7;; Keywords: comm, faces
@@ -46,12 +47,33 @@
46 "Track active buffers and show activity in the modeline." 47 "Track active buffers and show activity in the modeline."
47 :group 'erc) 48 :group 'erc)
48 49
50(defcustom erc-track-enable-keybindings 'ask
51 "Whether to enable the ERC track keybindings, namely:
52`C-c C-SPC' and `C-c C-@', which both do the same thing.
53
54The default is to check to see whether these keys are used
55already: if not, then enable the ERC track minor mode, which
56provides these keys. Otherwise, do not touch the keys.
57
58This can alternatively be set to either t or nil, which indicate
59respectively always to enable ERC track minor mode or never to
60enable ERC track minor mode.
61
62The reason for using this default value is to both (1) adhere to
63the Emacs development guidelines which say not to touch keys of
64the form C-c C-<something> and also (2) to meet the expectations
65of long-time ERC users, many of whom rely on these keybindings."
66 :group 'erc-track
67 :type '(choice (const :tag "Ask, if used already" ask)
68 (const :tag "Enable" t)
69 (const :tag "Disable" nil)))
70
49(defcustom erc-track-visibility t 71(defcustom erc-track-visibility t
50 "Where do we look for buffers to determine their visibility? 72 "Where do we look for buffers to determine their visibility?
51The value of this variable determines, when a buffer is considered 73The value of this variable determines, when a buffer is considered
52visible or invisible. New messages in invisible buffers are tracked, 74visible or invisible. New messages in invisible buffers are tracked,
53while switching to visible buffers when they are tracked removes them 75while switching to visible buffers when they are tracked removes them
54from the list. See also `erc-track-when-inactive-mode'. 76from the list. See also `erc-track-when-inactive'.
55 77
56Possible values are: 78Possible values are:
57 79
@@ -488,45 +510,124 @@ START is the minimum length of the name used."
488 (equal (erc-unique-substrings '("abc" "abcdefg")) 510 (equal (erc-unique-substrings '("abc" "abcdefg"))
489 '("abc" "abcd")))))) 511 '("abc" "abcd"))))))
490 512
513;;; Minor mode
514
515;; Play nice with other IRC clients (and Emacs development rules) by
516;; making this a minor mode
517
518(defvar erc-track-minor-mode-map (make-sparse-keymap)
519 "Keymap for rcirc track minor mode.")
520
521(define-key erc-track-minor-mode-map (kbd "C-c C-@") 'erc-track-switch-buffer)
522(define-key erc-track-minor-mode-map (kbd "C-c C-SPC")
523 'erc-track-switch-buffer)
524
525;;;###autoload
526(define-minor-mode erc-track-minor-mode
527 "Global minor mode for tracking ERC buffers and showing activity in the
528mode line.
529
530This exists for the sole purpose of providing the C-c C-SPC and
531C-c C-@ keybindings. Make sure that you have enabled the track
532module, otherwise the keybindings will not do anything useful."
533 :init-value nil
534 :lighter ""
535 :keymap erc-track-minor-mode-map
536 :global t
537 :group 'erc-track)
538
539(defun erc-track-minor-mode-maybe ()
540 "Enable `erc-track-minor-mode', depending on `erc-track-enable-keybindings'."
541 (unless (or erc-track-minor-mode
542 ;; don't start the minor mode until we have an ERC
543 ;; process running, because we don't want to prompt the
544 ;; user while starting Emacs
545 (null (erc-buffer-list)))
546 (cond ((eq erc-track-enable-keybindings 'ask)
547 (let ((key (or (and (key-binding (kbd "C-c C-SPC")) "C-SPC")
548 (and (key-binding (kbd "C-c C-@")) "C-@"))))
549 (if key
550 (if (y-or-n-p
551 (concat "The C-c " key " binding is in use;"
552 " override it for tracking? "))
553 (progn
554 (message (concat "Will change it; set"
555 " `erc-track-enable-keybindings'"
556 " to disable this message"))
557 (sleep-for 3)
558 (erc-track-minor-mode 1))
559 (message (concat "Not changing it; set"
560 " `erc-track-enable-keybindings'"
561 " to disable this message"))
562 (sleep-for 3))
563 (erc-track-minor-mode 1))))
564 ((eq erc-track-enable-keybindings t)
565 (erc-track-minor-mode 1))
566 (t nil))))
567
491;;; Module 568;;; Module
492 569
493;;;###autoload (autoload 'erc-track-mode "erc-track" nil t) 570;;;###autoload (autoload 'erc-track-mode "erc-track" nil t)
494(define-erc-module track track-modified-channels 571(define-erc-module track nil
495 "This mode tracks ERC channel buffers with activity." 572 "This mode tracks ERC channel buffers with activity."
496 ((erc-track-add-to-mode-line erc-track-position-in-mode-line) 573 ;; Enable:
497 (setq erc-modified-channels-object (erc-modified-channels-object nil)) 574 ((when (boundp 'erc-track-when-inactive)
498 (erc-update-mode-line) 575 (if erc-track-when-inactive
499 (if (featurep 'xemacs) 576 (progn
500 (defadvice switch-to-buffer (after erc-update (&rest args) activate) 577 (if (featurep 'xemacs)
501 (erc-modified-channels-update)) 578 (defadvice switch-to-buffer (after erc-update-when-inactive
502 (add-hook 'window-configuration-change-hook 'erc-modified-channels-update)) 579 (&rest args) activate)
503 (add-hook 'erc-insert-post-hook 'erc-track-modified-channels) 580 (erc-user-is-active))
504 (add-hook 'erc-disconnected-hook 'erc-modified-channels-update)) 581 (add-hook 'window-configuration-change-hook 'erc-user-is-active))
505 ((erc-track-remove-from-mode-line) 582 (add-hook 'erc-send-completed-hook 'erc-user-is-active)
506 (if (featurep 'xemacs) 583 (add-hook 'erc-server-001-functions 'erc-user-is-active))
507 (ad-disable-advice 'switch-to-buffer 'after 'erc-update) 584 (erc-track-add-to-mode-line erc-track-position-in-mode-line)
508 (remove-hook 'window-configuration-change-hook 585 (setq erc-modified-channels-object (erc-modified-channels-object nil))
509 'erc-modified-channels-update)) 586 (erc-update-mode-line)
510 (remove-hook 'erc-disconnected-hook 'erc-modified-channels-update) 587 (if (featurep 'xemacs)
511 (remove-hook 'erc-insert-post-hook 'erc-track-modified-channels))) 588 (defadvice switch-to-buffer (after erc-update (&rest args) activate)
512 589 (erc-modified-channels-update))
513;;;###autoload (autoload 'erc-track-when-inactive-mode "erc-track" nil t) 590 (add-hook 'window-configuration-change-hook
514(define-erc-module track-when-inactive nil 591 'erc-modified-channels-update))
515 "This mode enables channel tracking even for visible buffers, 592 (add-hook 'erc-insert-post-hook 'erc-track-modified-channels)
516if you are inactivity." 593 (add-hook 'erc-disconnected-hook 'erc-modified-channels-update))
517 ((if (featurep 'xemacs) 594 ;; enable the tracking keybindings
518 (defadvice switch-to-buffer (after erc-update-when-inactive (&rest args) activate) 595 (erc-track-minor-mode-maybe)))
519 (erc-user-is-active)) 596 ;; Disable:
520 (add-hook 'window-configuration-change-hook 'erc-user-is-active)) 597 ((when (boundp 'erc-track-when-inactive)
521 (add-hook 'erc-send-completed-hook 'erc-user-is-active) 598 (erc-track-remove-from-mode-line)
522 (add-hook 'erc-server-001-functions 'erc-user-is-active)) 599 (if erc-track-when-inactive
523 ((erc-track-remove-from-mode-line) 600 (progn
524 (if (featurep 'xemacs) 601 (if (featurep 'xemacs)
525 (ad-disable-advice 'switch-to-buffer 'after 'erc-update-when-inactive) 602 (ad-disable-advice 'switch-to-buffer 'after
526 (remove-hook 'window-configuration-change-hook 'erc-user-is-active)) 603 'erc-update-when-inactive)
527 (remove-hook 'erc-send-completed-hook 'erc-user-is-active) 604 (remove-hook 'window-configuration-change-hook
528 (remove-hook 'erc-server-001-functions 'erc-user-is-active) 605 'erc-user-is-active))
529 (remove-hook 'erc-timer-hook 'erc-user-is-active))) 606 (remove-hook 'erc-send-completed-hook 'erc-user-is-active)
607 (remove-hook 'erc-server-001-functions 'erc-user-is-active)
608 (remove-hook 'erc-timer-hook 'erc-user-is-active))
609 (if (featurep 'xemacs)
610 (ad-disable-advice 'switch-to-buffer 'after 'erc-update)
611 (remove-hook 'window-configuration-change-hook
612 'erc-modified-channels-update))
613 (remove-hook 'erc-disconnected-hook 'erc-modified-channels-update)
614 (remove-hook 'erc-insert-post-hook 'erc-track-modified-channels))
615 ;; disable the tracking keybindings
616 (when erc-track-minor-mode
617 (erc-track-minor-mode -1)))))
618
619(defcustom erc-track-when-inactive nil
620 "Enable channel tracking even for visible buffers, if you are
621inactive."
622 :group 'erc-track
623 :type 'boolean
624 :set (lambda (sym val)
625 (if erc-track-mode
626 (progn
627 (erc-track-disable)
628 (set sym val)
629 (erc-track-enable))
630 (set sym val))))
530 631
531;;; Visibility 632;;; Visibility
532 633
@@ -545,7 +646,7 @@ only consider active buffers visible.")
545 646
546(defun erc-buffer-visible (buffer) 647(defun erc-buffer-visible (buffer)
547 "Return non-nil when the buffer is visible." 648 "Return non-nil when the buffer is visible."
548 (if erc-track-when-inactive-mode 649 (if erc-track-when-inactive
549 (when erc-buffer-activity; could be nil 650 (when erc-buffer-activity; could be nil
550 (and (get-buffer-window buffer erc-track-visibility) 651 (and (get-buffer-window buffer erc-track-visibility)
551 (<= (erc-time-diff erc-buffer-activity (erc-current-time)) 652 (<= (erc-time-diff erc-buffer-activity (erc-current-time))
@@ -815,7 +916,9 @@ relative to `erc-track-switch-direction'"
815switch back to the last non-ERC buffer visited. Next is defined by 916switch back to the last non-ERC buffer visited. Next is defined by
816`erc-track-switch-direction', a negative argument will reverse this." 917`erc-track-switch-direction', a negative argument will reverse this."
817 (interactive "p") 918 (interactive "p")
818 (when erc-track-mode 919 (if (not erc-track-mode)
920 (message (concat "Enable the ERC track module if you want to use the"
921 " tracking minor mode"))
819 (cond (erc-modified-channels-alist 922 (cond (erc-modified-channels-alist
820 ;; if we're not in erc-mode, set this buffer to return to 923 ;; if we're not in erc-mode, set this buffer to return to
821 (unless (eq major-mode 'erc-mode) 924 (unless (eq major-mode 'erc-mode)
@@ -828,12 +931,6 @@ switch back to the last non-ERC buffer visited. Next is defined by
828 (buffer-live-p erc-track-last-non-erc-buffer)) 931 (buffer-live-p erc-track-last-non-erc-buffer))
829 (switch-to-buffer erc-track-last-non-erc-buffer))))) 932 (switch-to-buffer erc-track-last-non-erc-buffer)))))
830 933
831;; These bindings are global, because they pop us from any other
832;; buffer to an active ERC buffer!
833
834(global-set-key (kbd "C-c C-@") 'erc-track-switch-buffer)
835(global-set-key (kbd "C-c C-SPC") 'erc-track-switch-buffer)
836
837(provide 'erc-track) 934(provide 'erc-track)
838 935
839;;; erc-track.el ends here 936;;; erc-track.el ends here
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index 927dce02d64..37c2c2e0883 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -66,7 +66,7 @@
66 66
67;;; Code: 67;;; Code:
68 68
69(defconst erc-version-string "Version 5.2 stable pre-release" 69(defconst erc-version-string "Version 5.2"
70 "ERC version. This is used by function `erc-version'.") 70 "ERC version. This is used by function `erc-version'.")
71 71
72(eval-when-compile (require 'cl)) 72(eval-when-compile (require 'cl))
@@ -324,7 +324,7 @@ Each function should accept two arguments, NEW-NICK and OLD-NICK."
324 324
325(defcustom erc-connect-pre-hook '(erc-initialize-log-marker) 325(defcustom erc-connect-pre-hook '(erc-initialize-log-marker)
326 "Hook called just before `erc' calls `erc-connect'. 326 "Hook called just before `erc' calls `erc-connect'.
327Functions are run in the buffer-to-be." 327Functions are passed a buffer as the first argument."
328 :group 'erc-hooks 328 :group 'erc-hooks
329 :type 'hook) 329 :type 'hook)
330 330
@@ -392,14 +392,14 @@ in the current buffer's `erc-channel-users' hash table."
392(defsubst erc-get-server-user (nick) 392(defsubst erc-get-server-user (nick)
393 "Finds the USER corresponding to NICK in the current server's 393 "Finds the USER corresponding to NICK in the current server's
394`erc-server-users' hash table." 394`erc-server-users' hash table."
395 (with-current-buffer (process-buffer erc-server-process) 395 (erc-with-server-buffer
396 (gethash (erc-downcase nick) erc-server-users))) 396 (gethash (erc-downcase nick) erc-server-users)))
397 397
398(defsubst erc-add-server-user (nick user) 398(defsubst erc-add-server-user (nick user)
399 "This function is for internal use only. 399 "This function is for internal use only.
400 400
401Adds USER with nickname NICK to the `erc-server-users' hash table." 401Adds USER with nickname NICK to the `erc-server-users' hash table."
402 (with-current-buffer (process-buffer erc-server-process) 402 (erc-with-server-buffer
403 (puthash (erc-downcase nick) user erc-server-users))) 403 (puthash (erc-downcase nick) user erc-server-users)))
404 404
405(defsubst erc-remove-server-user (nick) 405(defsubst erc-remove-server-user (nick)
@@ -410,7 +410,7 @@ hash table. This user is not removed from the
410`erc-channel-users' lists of other buffers. 410`erc-channel-users' lists of other buffers.
411 411
412See also: `erc-remove-user'." 412See also: `erc-remove-user'."
413 (with-current-buffer (process-buffer erc-server-process) 413 (erc-with-server-buffer
414 (remhash (erc-downcase nick) erc-server-users))) 414 (remhash (erc-downcase nick) erc-server-users)))
415 415
416(defun erc-change-user-nickname (user new-nick) 416(defun erc-change-user-nickname (user new-nick)
@@ -421,7 +421,7 @@ Changes the nickname of USER to NEW-NICK in the
421other buffers are also changed." 421other buffers are also changed."
422 (let ((nick (erc-server-user-nickname user))) 422 (let ((nick (erc-server-user-nickname user)))
423 (setf (erc-server-user-nickname user) new-nick) 423 (setf (erc-server-user-nickname user) new-nick)
424 (with-current-buffer (process-buffer erc-server-process) 424 (erc-with-server-buffer
425 (remhash (erc-downcase nick) erc-server-users) 425 (remhash (erc-downcase nick) erc-server-users)
426 (puthash (erc-downcase new-nick) user erc-server-users)) 426 (puthash (erc-downcase new-nick) user erc-server-users))
427 (dolist (buf (erc-server-user-buffers user)) 427 (dolist (buf (erc-server-user-buffers user))
@@ -514,16 +514,15 @@ See also: `erc-sort-channel-users-by-activity'"
514 514
515(defun erc-get-server-nickname-list () 515(defun erc-get-server-nickname-list ()
516 "Returns a list of known nicknames on the current server." 516 "Returns a list of known nicknames on the current server."
517 (if (erc-server-process-alive) 517 (erc-with-server-buffer
518 (with-current-buffer (erc-server-buffer) 518 (let (nicks)
519 (let (nicks) 519 (when (hash-table-p erc-server-users)
520 (when (hash-table-p erc-server-users) 520 (maphash (lambda (n user)
521 (maphash (lambda (n user) 521 (setq nicks
522 (setq nicks 522 (cons (erc-server-user-nickname user)
523 (cons (erc-server-user-nickname user) 523 nicks)))
524 nicks))) 524 erc-server-users)
525 erc-server-users) 525 nicks))))
526 nicks)))))
527 526
528(defun erc-get-channel-nickname-list () 527(defun erc-get-channel-nickname-list ()
529 "Returns a list of known nicknames on the current channel." 528 "Returns a list of known nicknames on the current channel."
@@ -538,16 +537,15 @@ See also: `erc-sort-channel-users-by-activity'"
538 537
539(defun erc-get-server-nickname-alist () 538(defun erc-get-server-nickname-alist ()
540 "Returns an alist of known nicknames on the current server." 539 "Returns an alist of known nicknames on the current server."
541 (if (erc-server-process-alive) 540 (erc-with-server-buffer
542 (with-current-buffer (erc-server-buffer) 541 (let (nicks)
543 (let (nicks) 542 (when (hash-table-p erc-server-users)
544 (when (hash-table-p erc-server-users) 543 (maphash (lambda (n user)
545 (maphash (lambda (n user) 544 (setq nicks
546 (setq nicks 545 (cons (cons (erc-server-user-nickname user) nil)
547 (cons (cons (erc-server-user-nickname user) nil) 546 nicks)))
548 nicks))) 547 erc-server-users)
549 erc-server-users) 548 nicks))))
550 nicks)))))
551 549
552(defun erc-get-channel-nickname-alist () 550(defun erc-get-channel-nickname-alist ()
553 "Returns an alist of known nicknames on the current channel." 551 "Returns an alist of known nicknames on the current channel."
@@ -1293,7 +1291,7 @@ capabilities."
1293 (unless (erc-server-buffer-p) 1291 (unless (erc-server-buffer-p)
1294 (error 1292 (error
1295 "You should only run `erc-once-with-server-event' in a server buffer")) 1293 "You should only run `erc-once-with-server-event' in a server buffer"))
1296 (let ((fun (erc-gensym)) 1294 (let ((fun (make-symbol "fun"))
1297 (hook (erc-get-hook event))) 1295 (hook (erc-get-hook event)))
1298 (put fun 'erc-original-buffer (current-buffer)) 1296 (put fun 'erc-original-buffer (current-buffer))
1299 (fset fun `(lambda (proc parsed) 1297 (fset fun `(lambda (proc parsed)
@@ -1316,7 +1314,7 @@ not be run.
1316 1314
1317When FORMS execute, the current buffer is the server buffer associated with the 1315When FORMS execute, the current buffer is the server buffer associated with the
1318connection over which the data was received that triggered EVENT." 1316connection over which the data was received that triggered EVENT."
1319 (let ((fun (erc-gensym)) 1317 (let ((fun (make-symbol "fun"))
1320 (hook (erc-get-hook event))) 1318 (hook (erc-get-hook event)))
1321 (fset fun `(lambda (proc parsed) 1319 (fset fun `(lambda (proc parsed)
1322 (remove-hook ',hook ',fun) 1320 (remove-hook ',hook ',fun)
@@ -1370,7 +1368,7 @@ If BUFFER is nil, the current buffer is used."
1370(defun erc-ison-p (nick) 1368(defun erc-ison-p (nick)
1371 "Return non-nil if NICK is online." 1369 "Return non-nil if NICK is online."
1372 (interactive "sNick: ") 1370 (interactive "sNick: ")
1373 (with-current-buffer (erc-server-buffer) 1371 (erc-with-server-buffer
1374 (let ((erc-online-p 'unknown)) 1372 (let ((erc-online-p 'unknown))
1375 (erc-once-with-server-event 1373 (erc-once-with-server-event
1376 303 1374 303
@@ -1420,7 +1418,7 @@ server buffer.")
1420(defun erc-active-buffer () 1418(defun erc-active-buffer ()
1421 "Return the value of `erc-active-buffer' for the current server. 1419 "Return the value of `erc-active-buffer' for the current server.
1422Defaults to the server buffer." 1420Defaults to the server buffer."
1423 (with-current-buffer (erc-server-buffer) 1421 (erc-with-server-buffer
1424 (if (buffer-live-p erc-active-buffer) 1422 (if (buffer-live-p erc-active-buffer)
1425 erc-active-buffer 1423 erc-active-buffer
1426 (setq erc-active-buffer (current-buffer))))) 1424 (setq erc-active-buffer (current-buffer)))))
@@ -1603,10 +1601,10 @@ See `erc-get-buffer' for details.
1603See also `with-current-buffer'. 1601See also `with-current-buffer'.
1604 1602
1605\(fn (TARGET [PROCESS]) BODY...)" 1603\(fn (TARGET [PROCESS]) BODY...)"
1606 (let ((buf (erc-gensym)) 1604 (let ((buf (make-symbol "buf"))
1607 (proc (erc-gensym)) 1605 (proc (make-symbol "proc"))
1608 (target (erc-gensym)) 1606 (target (make-symbol "target"))
1609 (process (erc-gensym))) 1607 (process (make-symbol "process")))
1610 `(let* ((,target ,(car spec)) 1608 `(let* ((,target ,(car spec))
1611 (,process ,(cadr spec)) 1609 (,process ,(cadr spec))
1612 (,buf (if (bufferp ,target) 1610 (,buf (if (bufferp ,target)
@@ -1616,7 +1614,7 @@ See also `with-current-buffer'.
1616 erc-server-process)))) 1614 erc-server-process))))
1617 (if (and ,target ,proc) 1615 (if (and ,target ,proc)
1618 (erc-get-buffer ,target ,proc)))))) 1616 (erc-get-buffer ,target ,proc))))))
1619 (when ,buf 1617 (when (buffer-live-p ,buf)
1620 (with-current-buffer ,buf 1618 (with-current-buffer ,buf
1621 ,@body))))) 1619 ,@body)))))
1622(put 'erc-with-buffer 'lisp-indent-function 1) 1620(put 'erc-with-buffer 'lisp-indent-function 1)
@@ -1671,8 +1669,8 @@ FORMS will be evaluated in all buffers having the process PROCESS and
1671where PRED matches or in all buffers of the server process if PRED is 1669where PRED matches or in all buffers of the server process if PRED is
1672nil." 1670nil."
1673 ;; Make the evaluation have the correct order 1671 ;; Make the evaluation have the correct order
1674 (let ((pre (erc-gensym)) 1672 (let ((pre (make-symbol "pre"))
1675 (pro (erc-gensym))) 1673 (pro (make-symbol "pro")))
1676 `(let ((,pro ,process) 1674 `(let ((,pro ,process)
1677 (,pre ,pred)) 1675 (,pre ,pred))
1678 (mapcar (lambda (buffer) 1676 (mapcar (lambda (buffer)
@@ -1755,7 +1753,10 @@ all channel buffers on all servers."
1755(make-variable-buffer-local 'erc-invitation) 1753(make-variable-buffer-local 'erc-invitation)
1756 1754
1757(defvar erc-away nil 1755(defvar erc-away nil
1758 "Non-nil indicates that we are away.") 1756 "Non-nil indicates that we are away.
1757
1758Use `erc-away-time' to access this if you might be in a channel
1759buffer rather than a server buffer.")
1759(make-variable-buffer-local 'erc-away) 1760(make-variable-buffer-local 'erc-away)
1760 1761
1761(defvar erc-channel-list nil 1762(defvar erc-channel-list nil
@@ -1813,43 +1814,43 @@ removed from the list will be disabled."
1813 :type 1814 :type
1814 '(set 1815 '(set
1815 :greedy t 1816 :greedy t
1816 (const :tag "Set away status automatically" autoaway) 1817 (const :tag "autoaway: Set away status automatically" autoaway)
1817 (const :tag "Join channels automatically" autojoin) 1818 (const :tag "autojoin: Join channels automatically" autojoin)
1818 (const :tag "Buttonize URLs, nicknames, and other text" button) 1819 (const :tag "button: Buttonize URLs, nicknames, and other text" button)
1819 (const 1820 (const :tag "capab: Mark unidentified users on servers supporting CAPAB"
1820 :tag 1821 capab-identify)
1821 "Mark unidentified users on freenode and other servers supporting CAPAB" 1822 (const :tag "completion: Complete nicknames and commands (programmable)"
1822 capab-identify) 1823 completion)
1823 (const :tag "Wrap long lines" fill) 1824 (const :tag "hecomplete: Complete nicknames and commands (old)" hecomplete)
1824 (const :tag "Launch an identd server on port 8113" identd) 1825 (const :tag "fill: Wrap long lines" fill)
1825 (const :tag "Highlight or remove IRC control characters" 1826 (const :tag "identd: Launch an identd server on port 8113" identd)
1827 (const :tag "irccontrols: Highlight or remove IRC control characters"
1826 irccontrols) 1828 irccontrols)
1827 (const :tag "Save buffers in logs" log) 1829 (const :tag "log: Save buffers in logs" log)
1828 (const :tag "Highlight pals, fools, and other keywords" match) 1830 (const :tag "match: Highlight pals, fools, and other keywords" match)
1829 (const :tag "Display a menu in ERC buffers" menu) 1831 (const :tag "menu: Display a menu in ERC buffers" menu)
1830 (const :tag "Detect netsplits" netsplit) 1832 (const :tag "netsplit: Detect netsplits" netsplit)
1831 (const :tag "Don't display non-IRC commands after evaluation" 1833 (const :tag "noncommands: Don't display non-IRC commands after evaluation"
1832 noncommands) 1834 noncommands)
1833 (const :tag "Notify when the online status of certain users changes" 1835 (const :tag
1836 "notify: Notify when the online status of certain users changes"
1834 notify) 1837 notify)
1835 (const :tag "Complete nicknames and commands (programmable)" 1838 (const :tag "page: Process CTCP PAGE requests from IRC" page)
1836 completion) 1839 (const :tag "readonly: Make displayed lines read-only" readonly)
1837 (const :tag "Complete nicknames and commands (old)" hecomplete) 1840 (const :tag "replace: Replace text in messages" replace)
1838 (const :tag "Process CTCP PAGE requests from IRC" page) 1841 (const :tag "ring: Enable an input history" ring)
1839 (const :tag "Make displayed lines read-only" readonly) 1842 (const :tag "scrolltobottom: Scroll to the bottom of the buffer"
1840 (const :tag "Replace text in messages" replace) 1843 scrolltobottom)
1841 (const :tag "Enable an input history" ring) 1844 (const :tag "services: Identify to Nickserv (IRC Services) automatically"
1842 (const :tag "Scroll to the bottom of the buffer" scrolltobottom)
1843 (const :tag "Identify to Nickserv (IRC Services) automatically"
1844 services) 1845 services)
1845 (const :tag "Convert smileys to pretty icons" smiley) 1846 (const :tag "smiley: Convert smileys to pretty icons" smiley)
1846 (const :tag "Play sounds when you receive CTCP SOUND requests" 1847 (const :tag "sound: Play sounds when you receive CTCP SOUND requests"
1847 sound) 1848 sound)
1848 (const :tag "Add timestamps to messages" stamp) 1849 (const :tag "stamp: Add timestamps to messages" stamp)
1849 (const :tag "Check spelling" spelling) 1850 (const :tag "spelling: Check spelling" spelling)
1850 (const :tag "Track channel activity in the mode-line" track) 1851 (const :tag "track: Track channel activity in the mode-line" track)
1851 (const :tag "Truncate buffers to a certain size" truncate) 1852 (const :tag "truncate: Truncate buffers to a certain size" truncate)
1852 (const :tag "Translate morse code in messages" unmorse) 1853 (const :tag "unmorse: Translate morse code in messages" unmorse)
1853 (repeat :tag "Others" :inline t symbol)) 1854 (repeat :tag "Others" :inline t symbol))
1854 :group 'erc) 1855 :group 'erc)
1855 1856
@@ -1902,9 +1903,7 @@ removed from the list will be disabled."
1902 1903
1903(defun erc-open (&optional server port nick full-name 1904(defun erc-open (&optional server port nick full-name
1904 connect passwd tgt-list channel process) 1905 connect passwd tgt-list channel process)
1905 "ERC is a powerful, modular, and extensible IRC client. 1906 "Connect to SERVER on PORT as NICK with FULL-NAME.
1906
1907Connect to SERVER on PORT as NICK with FULL-NAME.
1908 1907
1909If CONNECT is non-nil, connect to the server. Otherwise assume 1908If CONNECT is non-nil, connect to the server. Otherwise assume
1910already connected and just create a separate buffer for the new 1909already connected and just create a separate buffer for the new
@@ -1969,10 +1968,6 @@ Returns the buffer for the given server or channel."
1969 (erc-set-active-buffer buffer) 1968 (erc-set-active-buffer buffer)
1970 ;; last invitation channel 1969 ;; last invitation channel
1971 (setq erc-invitation nil) 1970 (setq erc-invitation nil)
1972 ;; away flag
1973 ;; Should only be used in session-buffers
1974 (setq erc-away (let ((serverbuf (erc-server-buffer)))
1975 (and serverbuf (with-current-buffer serverbuf erc-away))))
1976 ;; Server channel list 1971 ;; Server channel list
1977 (setq erc-channel-list ()) 1972 (setq erc-channel-list ())
1978 ;; login-time 'nick in use' error 1973 ;; login-time 'nick in use' error
@@ -1987,25 +1982,25 @@ Returns the buffer for the given server or channel."
1987 (setq erc-dbuf 1982 (setq erc-dbuf
1988 (when erc-log-p 1983 (when erc-log-p
1989 (get-buffer-create (concat "*ERC-DEBUG: " server "*")))) 1984 (get-buffer-create (concat "*ERC-DEBUG: " server "*"))))
1990 (erc-determine-parameters server port nick full-name) 1985 ;; set up prompt
1991
1992 ;; Saving log file on exit
1993 (run-hooks 'erc-connect-pre-hook)
1994
1995 (when connect
1996 (erc-server-connect erc-session-server erc-session-port))
1997 (erc-update-mode-line)
1998 (set-marker erc-insert-marker (point))
1999 (unless continued-session 1986 (unless continued-session
2000 (goto-char (point-max)) 1987 (goto-char (point-max))
2001 (insert "\n")) 1988 (insert "\n"))
2002 (set-marker (process-mark erc-server-process) (point))
2003 (if continued-session 1989 (if continued-session
2004 (goto-char old-point) 1990 (goto-char old-point)
2005 (set-marker erc-insert-marker (point)) 1991 (set-marker erc-insert-marker (point))
2006 (erc-display-prompt) 1992 (erc-display-prompt)
2007 (goto-char (point-max))) 1993 (goto-char (point-max)))
2008 1994
1995 (erc-determine-parameters server port nick full-name)
1996
1997 ;; Saving log file on exit
1998 (run-hook-with-args 'erc-connect-pre-hook buffer)
1999
2000 (when connect
2001 (erc-server-connect erc-session-server erc-session-port buffer))
2002 (erc-update-mode-line)
2003
2009 ;; Now display the buffer in a window as per user wishes. 2004 ;; Now display the buffer in a window as per user wishes.
2010 (unless (eq buffer old-buffer) 2005 (unless (eq buffer old-buffer)
2011 (when erc-log-p 2006 (when erc-log-p
@@ -2016,11 +2011,13 @@ Returns the buffer for the given server or channel."
2016 2011
2017 buffer)) 2012 buffer))
2018 2013
2019(defun erc-initialize-log-marker () 2014(defun erc-initialize-log-marker (buffer)
2020 "Initialize the `erc-last-saved-position' marker to a sensible position." 2015 "Initialize the `erc-last-saved-position' marker to a sensible position.
2016BUFFER is the current buffer."
2017 (with-current-buffer buffer
2021 (setq erc-last-saved-position (make-marker)) 2018 (setq erc-last-saved-position (make-marker))
2022 (move-marker erc-last-saved-position 2019 (move-marker erc-last-saved-position
2023 (1- (marker-position erc-insert-marker)))) 2020 (1- (marker-position erc-insert-marker)))))
2024 2021
2025;; interactive startup 2022;; interactive startup
2026 2023
@@ -2120,8 +2117,12 @@ functions in here get called with the parameters SERVER and NICK."
2120 (nick (erc-compute-nick)) 2117 (nick (erc-compute-nick))
2121 password 2118 password
2122 (full-name (erc-compute-full-name))) 2119 (full-name (erc-compute-full-name)))
2123 "Select connection parameters and run ERC. 2120 "ERC is a powerful, modular, and extensible IRC client.
2124Non-interactively, it takes keyword arguments 2121This function is the main entry point for ERC.
2122
2123It permits you to select connection parameters, and then starts ERC.
2124
2125Non-interactively, it takes the keyword arguments
2125 (server (erc-compute-server)) 2126 (server (erc-compute-server))
2126 (port (erc-compute-port)) 2127 (port (erc-compute-port))
2127 (nick (erc-compute-nick)) 2128 (nick (erc-compute-nick))
@@ -2132,12 +2133,13 @@ That is, if called with
2132 2133
2133 (erc :server \"irc.freenode.net\" :full-name \"Harry S Truman\") 2134 (erc :server \"irc.freenode.net\" :full-name \"Harry S Truman\")
2134 2135
2135server and full-name will be set to those values, whereas 2136then the server and full-name will be set to those values, whereas
2136`erc-compute-port', `erc-compute-nick' and `erc-compute-full-name' will 2137`erc-compute-port', `erc-compute-nick' and `erc-compute-full-name' will
2137be invoked for the values of the other parameters." 2138be invoked for the values of the other parameters."
2138 (interactive (erc-select-read-args)) 2139 (interactive (erc-select-read-args))
2139 (erc-open server port nick full-name t password)) 2140 (erc-open server port nick full-name t password))
2140 2141
2142;;;###autoload
2141(defalias 'erc-select 'erc) 2143(defalias 'erc-select 'erc)
2142 2144
2143(defun erc-ssl (&rest r) 2145(defun erc-ssl (&rest r)
@@ -2428,7 +2430,7 @@ See also `erc-format-message' and `erc-display-line'."
2428 2430
2429This function relies on the erc-parsed text-property being 2431This function relies on the erc-parsed text-property being
2430present." 2432present."
2431 (let ((prop-val (get-text-property position 'erc-parsed))) 2433 (let ((prop-val (erc-get-parsed-vector position)))
2432 (and prop-val (member (erc-response.command prop-val) list)))) 2434 (and prop-val (member (erc-response.command prop-val) list))))
2433 2435
2434(defvar erc-send-input-line-function 'erc-send-input-line) 2436(defvar erc-send-input-line-function 'erc-send-input-line)
@@ -2586,20 +2588,19 @@ If no USER argument is specified, list the contents of `erc-ignore-list'."
2586 (erc-display-line 2588 (erc-display-line
2587 (erc-make-notice (format "Now ignoring %s" user)) 2589 (erc-make-notice (format "Now ignoring %s" user))
2588 'active) 2590 'active)
2589 (with-current-buffer (erc-server-buffer) 2591 (erc-with-server-buffer (add-to-list 'erc-ignore-list user)))
2590 (add-to-list 'erc-ignore-list user))) 2592 (if (null (erc-with-server-buffer erc-ignore-list))
2591 (if (null (with-current-buffer (erc-server-buffer) erc-ignore-list))
2592 (erc-display-line (erc-make-notice "Ignore list is empty") 'active) 2593 (erc-display-line (erc-make-notice "Ignore list is empty") 'active)
2593 (erc-display-line (erc-make-notice "Ignore list:") 'active) 2594 (erc-display-line (erc-make-notice "Ignore list:") 'active)
2594 (mapc #'(lambda (item) 2595 (mapc #'(lambda (item)
2595 (erc-display-line (erc-make-notice item) 2596 (erc-display-line (erc-make-notice item)
2596 'active)) 2597 'active))
2597 (with-current-buffer (erc-server-buffer) erc-ignore-list)))) 2598 (erc-with-server-buffer erc-ignore-list))))
2598 t) 2599 t)
2599 2600
2600(defun erc-cmd-UNIGNORE (user) 2601(defun erc-cmd-UNIGNORE (user)
2601 "Remove the user specified in USER from the ignore list." 2602 "Remove the user specified in USER from the ignore list."
2602 (let ((ignored-nick (car (with-current-buffer (erc-server-buffer) 2603 (let ((ignored-nick (car (erc-with-server-buffer
2603 (erc-member-ignore-case (regexp-quote user) 2604 (erc-member-ignore-case (regexp-quote user)
2604 erc-ignore-list))))) 2605 erc-ignore-list)))))
2605 (unless ignored-nick 2606 (unless ignored-nick
@@ -2614,7 +2615,7 @@ If no USER argument is specified, list the contents of `erc-ignore-list'."
2614 (erc-display-line 2615 (erc-display-line
2615 (erc-make-notice (format "No longer ignoring %s" user)) 2616 (erc-make-notice (format "No longer ignoring %s" user))
2616 'active) 2617 'active)
2617 (with-current-buffer (erc-server-buffer) 2618 (erc-with-server-buffer
2618 (setq erc-ignore-list (delete ignored-nick erc-ignore-list))))) 2619 (setq erc-ignore-list (delete ignored-nick erc-ignore-list)))))
2619 t) 2620 t)
2620 2621
@@ -2673,8 +2674,8 @@ If no reason is given, unset away status."
2673 "Mark the user as being away everywhere, the reason being indicated by LINE." 2674 "Mark the user as being away everywhere, the reason being indicated by LINE."
2674 ;; on all server buffers. 2675 ;; on all server buffers.
2675 (erc-with-all-buffers-of-server nil 2676 (erc-with-all-buffers-of-server nil
2676 #'erc-server-buffer-p 2677 #'erc-open-server-buffer-p
2677 (erc-cmd-AWAY line))) 2678 (erc-cmd-AWAY line)))
2678(put 'erc-cmd-GAWAY 'do-not-parse-args t) 2679(put 'erc-cmd-GAWAY 'do-not-parse-args t)
2679 2680
2680(defun erc-cmd-CTCP (nick cmd &rest args) 2681(defun erc-cmd-CTCP (nick cmd &rest args)
@@ -2866,10 +2867,9 @@ If SERVER is non-nil, use that, rather than the current server."
2866 2867
2867(defun erc-cmd-IDLE (nick) 2868(defun erc-cmd-IDLE (nick)
2868 "Show the length of time NICK has been idle." 2869 "Show the length of time NICK has been idle."
2869 (let ((serverbuf (erc-server-buffer)) 2870 (let ((origbuf (current-buffer))
2870 (origbuf (current-buffer))
2871 symlist) 2871 symlist)
2872 (with-current-buffer serverbuf 2872 (erc-with-server-buffer
2873 (add-to-list 'symlist 2873 (add-to-list 'symlist
2874 (cons (erc-once-with-server-event 2874 (cons (erc-once-with-server-event
2875 311 `(string= ,nick 2875 311 `(string= ,nick
@@ -3027,8 +3027,8 @@ The rest of LINE is the message to send."
3027(defun erc-cmd-NICK (nick) 3027(defun erc-cmd-NICK (nick)
3028 "Change current nickname to NICK." 3028 "Change current nickname to NICK."
3029 (erc-log (format "cmd: NICK: %s (erc-bad-nick: %S)" nick erc-bad-nick)) 3029 (erc-log (format "cmd: NICK: %s (erc-bad-nick: %S)" nick erc-bad-nick))
3030 (let ((nicklen (cdr (assoc "NICKLEN" (with-current-buffer (erc-server-buffer) 3030 (let ((nicklen (cdr (assoc "NICKLEN" (erc-with-server-buffer
3031 erc-server-parameters))))) 3031 erc-server-parameters)))))
3032 (and nicklen (> (length nick) (string-to-number nicklen)) 3032 (and nicklen (> (length nick) (string-to-number nicklen))
3033 (erc-display-message 3033 (erc-display-message
3034 nil 'notice 'active 'nick-too-long 3034 nil 'notice 'active 'nick-too-long
@@ -3167,7 +3167,8 @@ the message given by REASON."
3167 ((string-match "^\\s-*\\(.*\\)$" reason) 3167 ((string-match "^\\s-*\\(.*\\)$" reason)
3168 (let* ((s (match-string 1 reason)) 3168 (let* ((s (match-string 1 reason))
3169 (buffer (erc-server-buffer)) 3169 (buffer (erc-server-buffer))
3170 (reason (funcall erc-quit-reason (if (equal s "") nil s)))) 3170 (reason (funcall erc-quit-reason (if (equal s "") nil s)))
3171 server-proc)
3171 (with-current-buffer (if (and buffer 3172 (with-current-buffer (if (and buffer
3172 (bufferp buffer)) 3173 (bufferp buffer))
3173 buffer 3174 buffer
@@ -3175,10 +3176,18 @@ the message given by REASON."
3175 (erc-log (format "cmd: QUIT: %s" reason)) 3176 (erc-log (format "cmd: QUIT: %s" reason))
3176 (setq erc-server-quitting t) 3177 (setq erc-server-quitting t)
3177 (erc-set-active-buffer (erc-server-buffer)) 3178 (erc-set-active-buffer (erc-server-buffer))
3179 (setq server-proc erc-server-process)
3178 (erc-server-send (format "QUIT :%s" reason))) 3180 (erc-server-send (format "QUIT :%s" reason)))
3179 (run-hook-with-args 'erc-quit-hook erc-server-process) 3181 (run-hook-with-args 'erc-quit-hook server-proc)
3180 (when erc-kill-queries-on-quit 3182 (when erc-kill-queries-on-quit
3181 (erc-kill-query-buffers erc-server-process))) 3183 (erc-kill-query-buffers server-proc))
3184 ;; if the process has not been killed within 4 seconds, kill it
3185 (run-at-time 4 nil
3186 (lambda (proc)
3187 (when (and (processp proc)
3188 (memq (process-status proc) '(run open)))
3189 (delete-process proc)))
3190 server-proc))
3182 t) 3191 t)
3183 (t nil))) 3192 (t nil)))
3184 3193
@@ -3189,9 +3198,7 @@ the message given by REASON."
3189 3198
3190(defun erc-cmd-GQUIT (reason) 3199(defun erc-cmd-GQUIT (reason)
3191 "Disconnect from all servers at once with the same quit REASON." 3200 "Disconnect from all servers at once with the same quit REASON."
3192 (erc-with-all-buffers-of-server nil #'(lambda () 3201 (erc-with-all-buffers-of-server nil #'erc-open-server-buffer-p
3193 (and (erc-server-buffer-p)
3194 (erc-server-process-alive)))
3195 (erc-cmd-QUIT reason))) 3202 (erc-cmd-QUIT reason)))
3196 3203
3197(defalias 'erc-cmd-GQ 'erc-cmd-GQUIT) 3204(defalias 'erc-cmd-GQ 'erc-cmd-GQUIT)
@@ -3199,8 +3206,17 @@ the message given by REASON."
3199 3206
3200(defun erc-cmd-RECONNECT () 3207(defun erc-cmd-RECONNECT ()
3201 "Try to reconnect to the current IRC server." 3208 "Try to reconnect to the current IRC server."
3202 (setq erc-server-reconnect-count 0) 3209 (let ((buffer (or (erc-server-buffer) (current-buffer)))
3203 (erc-server-reconnect) 3210 (process nil))
3211 (with-current-buffer (if (bufferp buffer) buffer (current-buffer))
3212 (setq erc-server-quitting nil)
3213 (setq erc-server-reconnecting t)
3214 (setq erc-server-reconnect-count 0)
3215 (setq process (get-buffer-process (erc-server-buffer)))
3216 (if process
3217 (delete-process process)
3218 (erc-server-reconnect))
3219 (setq erc-server-reconnecting nil)))
3204 t) 3220 t)
3205 3221
3206(defun erc-cmd-SERVER (server) 3222(defun erc-cmd-SERVER (server)
@@ -3373,7 +3389,7 @@ The ban list is fetched from the server if necessary."
3373 (setq erc-server-367-functions 'erc-banlist-store 3389 (setq erc-server-367-functions 'erc-banlist-store
3374 erc-channel-banlist nil) 3390 erc-channel-banlist nil)
3375 ;; fetch the ban list then callback 3391 ;; fetch the ban list then callback
3376 (with-current-buffer (erc-server-buffer) 3392 (erc-with-server-buffer
3377 (erc-once-with-server-event 3393 (erc-once-with-server-event
3378 368 3394 368
3379 `(with-current-buffer ,chnl-name 3395 `(with-current-buffer ,chnl-name
@@ -3443,7 +3459,7 @@ Unban all currently banned users in the current channel."
3443 (let ((old-367-hook erc-server-367-functions)) 3459 (let ((old-367-hook erc-server-367-functions))
3444 (setq erc-server-367-functions 'erc-banlist-store) 3460 (setq erc-server-367-functions 'erc-banlist-store)
3445 ;; fetch the ban list then callback 3461 ;; fetch the ban list then callback
3446 (with-current-buffer (erc-server-buffer) 3462 (erc-with-server-buffer
3447 (erc-once-with-server-event 3463 (erc-once-with-server-event
3448 368 3464 368
3449 `(with-current-buffer ,chnl 3465 `(with-current-buffer ,chnl
@@ -3737,7 +3753,7 @@ To change how this query window is displayed, use `let' to bind
3737 (erc-update-mode-line) 3753 (erc-update-mode-line)
3738 buf)) 3754 buf))
3739 3755
3740(defcustom erc-auto-query nil 3756(defcustom erc-auto-query 'bury
3741 "If non-nil, create a query buffer each time you receive a private message. 3757 "If non-nil, create a query buffer each time you receive a private message.
3742 3758
3743If the buffer doesn't already exist it is created. This can be 3759If the buffer doesn't already exist it is created. This can be
@@ -3811,7 +3827,7 @@ See also `erc-display-error-notice'."
3811 (setq erc-nick-change-attempt-count (+ erc-nick-change-attempt-count 1)) 3827 (setq erc-nick-change-attempt-count (+ erc-nick-change-attempt-count 1))
3812 (let ((newnick (nth 1 erc-default-nicks)) 3828 (let ((newnick (nth 1 erc-default-nicks))
3813 (nicklen (cdr (assoc "NICKLEN" 3829 (nicklen (cdr (assoc "NICKLEN"
3814 (with-current-buffer (erc-server-buffer) 3830 (erc-with-server-buffer
3815 erc-server-parameters))))) 3831 erc-server-parameters)))))
3816 (setq erc-bad-nick t) 3832 (setq erc-bad-nick t)
3817 ;; try to use a different nick 3833 ;; try to use a different nick
@@ -4101,24 +4117,29 @@ See also: `erc-echo-notice-in-user-buffers',
4101 "Run just after connection. 4117 "Run just after connection.
4102 4118
4103Set user modes and run `erc-after-connect' hook." 4119Set user modes and run `erc-after-connect' hook."
4104 (unless erc-server-connected ; only once per session 4120 (with-current-buffer (process-buffer proc)
4105 (let ((server (or erc-server-announced-name (erc-response.sender parsed))) 4121 (unless erc-server-connected ; only once per session
4106 (nick (car (erc-response.command-args parsed )))) 4122 (let ((server (or erc-server-announced-name
4107 (setq erc-server-connected t) 4123 (erc-response.sender parsed)))
4108 (erc-update-mode-line) 4124 (nick (car (erc-response.command-args parsed)))
4109 (erc-set-initial-user-mode nick) 4125 (buffer (process-buffer proc)))
4110 (erc-server-setup-periodical-server-ping) 4126 (setq erc-server-connected t)
4111 (run-hook-with-args 'erc-after-connect server nick)))) 4127 (erc-update-mode-line)
4112 4128 (erc-set-initial-user-mode nick buffer)
4113(defun erc-set-initial-user-mode (nick) 4129 (erc-server-setup-periodical-ping buffer)
4114 "If `erc-user-mode' is non-nil for NICK, set the user modes." 4130 (run-hook-with-args 'erc-after-connect server nick)))))
4115 (when erc-user-mode 4131
4116 (let ((mode (if (functionp erc-user-mode) 4132(defun erc-set-initial-user-mode (nick buffer)
4117 (funcall erc-user-mode) 4133 "If `erc-user-mode' is non-nil for NICK, set the user modes.
4118 erc-user-mode))) 4134The server buffer is given by BUFFER."
4119 (when (stringp mode) 4135 (with-current-buffer buffer
4120 (erc-log (format "changing mode for %s to %s" nick mode)) 4136 (when erc-user-mode
4121 (erc-server-send (format "MODE %s %s" nick mode)))))) 4137 (let ((mode (if (functionp erc-user-mode)
4138 (funcall erc-user-mode)
4139 erc-user-mode)))
4140 (when (stringp mode)
4141 (erc-log (format "changing mode for %s to %s" nick mode))
4142 (erc-server-send (format "MODE %s %s" nick mode)))))))
4122 4143
4123(defun erc-display-error-notice (parsed string) 4144(defun erc-display-error-notice (parsed string)
4124 "Display STRING as an error notice. 4145 "Display STRING as an error notice.
@@ -4345,14 +4366,12 @@ If non-nil, return from being away."
4345 erc-nick))) 4366 erc-nick)))
4346 (cond 4367 (cond
4347 (away-p 4368 (away-p
4348 (erc-with-all-buffers-of-server proc nil 4369 (setq erc-away (current-time)))
4349 (setq erc-away (current-time))))
4350 (t 4370 (t
4351 (let ((away-time erc-away)) 4371 (let ((away-time erc-away))
4352 ;; away must be set to NIL BEFORE sending anything to prevent 4372 ;; away must be set to NIL BEFORE sending anything to prevent
4353 ;; an infinite recursion 4373 ;; an infinite recursion
4354 (erc-with-all-buffers-of-server proc nil 4374 (setq erc-away nil)
4355 (setq erc-away nil))
4356 (save-excursion 4375 (save-excursion
4357 (set-buffer (erc-active-buffer)) 4376 (set-buffer (erc-active-buffer))
4358 (when erc-public-away-p 4377 (when erc-public-away-p
@@ -5037,8 +5056,9 @@ strings over to the next call."
5037 5056
5038(defun erc-set-current-nick (nick) 5057(defun erc-set-current-nick (nick)
5039 "Set the current nickname to NICK." 5058 "Set the current nickname to NICK."
5040 (with-current-buffer (or (erc-server-buffer) 5059 (with-current-buffer (if (buffer-live-p (erc-server-buffer))
5041 (current-buffer)) 5060 (erc-server-buffer)
5061 (current-buffer))
5042 (setq erc-server-current-nick nick))) 5062 (setq erc-server-current-nick nick)))
5043 5063
5044(defun erc-current-nick () 5064(defun erc-current-nick ()
@@ -5119,7 +5139,7 @@ Takes a full SPEC of a user in the form \"nick!login@host\", and
5119matches against all the regexp's in `erc-ignore-list'. If any 5139matches against all the regexp's in `erc-ignore-list'. If any
5120match, returns that regexp." 5140match, returns that regexp."
5121 (catch 'found 5141 (catch 'found
5122 (dolist (ignored (with-current-buffer (erc-server-buffer) erc-ignore-list)) 5142 (dolist (ignored (erc-with-server-buffer erc-ignore-list))
5123 (if (string-match ignored spec) 5143 (if (string-match ignored spec)
5124 (throw 'found ignored))))) 5144 (throw 'found ignored)))))
5125 5145
@@ -5673,12 +5693,12 @@ entry of `channel-members'."
5673 "")) 5693 ""))
5674 user)))) 5694 user))))
5675 5695
5676(defun erc-away-p () 5696(defun erc-away-time ()
5677 "Return t if the current ERC process is set away." 5697 "Return non-nil if the current ERC process is set away.
5678 (save-excursion 5698
5679 (and (erc-server-buffer-live-p) 5699In particular, the time that we were set away is returned.
5680 (set-buffer (process-buffer erc-server-process)) 5700See `current-time' for details on the time format."
5681 erc-away))) 5701 (erc-with-server-buffer erc-away))
5682 5702
5683;; Mode line handling 5703;; Mode line handling
5684 5704
@@ -5706,9 +5726,17 @@ The following characters are replaced:
5706 "A string to be formatted and shown in the header-line in `erc-mode'. 5726 "A string to be formatted and shown in the header-line in `erc-mode'.
5707Only used starting in Emacs 21. 5727Only used starting in Emacs 21.
5708 5728
5729Set this to nil if you do not want the header line to be
5730displayed.
5731
5709See `erc-mode-line-format' for which characters are can be used." 5732See `erc-mode-line-format' for which characters are can be used."
5710 :group 'erc-mode-line-and-header 5733 :group 'erc-mode-line-and-header
5711 :type 'string) 5734 :set (lambda (sym val)
5735 (set sym val)
5736 (when (fboundp 'erc-update-mode-line)
5737 (erc-update-mode-line nil)))
5738 :type '(choice (const :tag "Disabled" nil)
5739 string))
5712 5740
5713(defcustom erc-header-line-uses-help-echo-p t 5741(defcustom erc-header-line-uses-help-echo-p t
5714 "Show the contents of the header line in the echo area or as a tooltip 5742 "Show the contents of the header line in the echo area or as a tooltip
@@ -5734,7 +5762,8 @@ Otherwise, use the `erc-header-line' face."
5734 5762
5735(defcustom erc-common-server-suffixes 5763(defcustom erc-common-server-suffixes
5736 '(("openprojects.net$" . "OPN") 5764 '(("openprojects.net$" . "OPN")
5737 ("freenode.net$" . "OPN")) 5765 ("freenode.net$" . "freenode")
5766 ("oftc.net$" . "OFTC"))
5738 "Alist of common server name suffixes. 5767 "Alist of common server name suffixes.
5739This variable is used in mode-line display to save screen 5768This variable is used in mode-line display to save screen
5740real estate. Set it to nil if you want to avoid changing 5769real estate. Set it to nil if you want to avoid changing
@@ -5786,9 +5815,7 @@ This should be a string with substitution variables recognized by
5786(defun erc-format-away-status () 5815(defun erc-format-away-status ()
5787 "Return a formatted `erc-mode-line-away-status-format' 5816 "Return a formatted `erc-mode-line-away-status-format'
5788if `erc-away' is non-nil." 5817if `erc-away' is non-nil."
5789 (let ((a (when (erc-server-buffer-live-p) 5818 (let ((a (erc-away-time)))
5790 (with-current-buffer (process-buffer erc-server-process)
5791 erc-away))))
5792 (if a 5819 (if a
5793 (format-time-string erc-mode-line-away-status-format a) 5820 (format-time-string erc-mode-line-away-status-format a)
5794 ""))) 5821 "")))
@@ -5813,9 +5840,7 @@ if `erc-away' is non-nil."
5813 5840
5814(defun erc-format-lag-time () 5841(defun erc-format-lag-time ()
5815 "Return the estimated lag time to server, `erc-server-lag'." 5842 "Return the estimated lag time to server, `erc-server-lag'."
5816 (let ((lag (when (erc-server-buffer-live-p) 5843 (let ((lag (erc-with-server-buffer erc-server-lag)))
5817 (with-current-buffer (process-buffer erc-server-process)
5818 erc-server-lag))))
5819 (cond (lag (format "lag:%.0f" lag)) 5844 (cond (lag (format "lag:%.0f" lag))
5820 (t "")))) 5845 (t ""))))
5821 5846
@@ -6137,7 +6162,8 @@ functions."
6137 (format "%s (%s@%s) has left channel %s%s" 6162 (format "%s (%s@%s) has left channel %s%s"
6138 nick user host channel 6163 nick user host channel
6139 (if (not (string= reason "")) 6164 (if (not (string= reason ""))
6140 (format ": %s" reason) 6165 (format ": %s"
6166 (erc-replace-regexp-in-string "%" "%%" reason))
6141 ""))))) 6167 "")))))
6142 6168
6143 6169
@@ -6232,6 +6258,13 @@ This function should be on `erc-kill-channel-hook'."
6232 "Find the next occurrence of the `erc-parsed' text property." 6258 "Find the next occurrence of the `erc-parsed' text property."
6233 (text-property-not-all (point-min) (point-max) 'erc-parsed nil)) 6259 (text-property-not-all (point-min) (point-max) 'erc-parsed nil))
6234 6260
6261(defun erc-restore-text-properties ()
6262 "Restore the property 'erc-parsed for the region."
6263 (let ((parsed-posn (erc-find-parsed-property)))
6264 (put-text-property
6265 (point-min) (point-max)
6266 'erc-parsed (when parsed-posn (erc-get-parsed-vector parsed-posn)))))
6267
6235(defun erc-get-parsed-vector (point) 6268(defun erc-get-parsed-vector (point)
6236 "Return the whole parsed vector on POINT." 6269 "Return the whole parsed vector on POINT."
6237 (get-text-property point 'erc-parsed)) 6270 (get-text-property point 'erc-parsed))
@@ -6263,8 +6296,7 @@ Otherwise, connect to HOST:PORT as USER and /join CHANNEL."
6263 (lambda () 6296 (lambda ()
6264 (and (string-equal erc-session-server host) 6297 (and (string-equal erc-session-server host)
6265 (= erc-session-port port) 6298 (= erc-session-port port)
6266 erc-server-connected 6299 (erc-open-server-buffer-p)))))))
6267 (eq (erc-server-buffer) (current-buffer))))))))
6268 (with-current-buffer (or server-buffer (current-buffer)) 6300 (with-current-buffer (or server-buffer (current-buffer))
6269 (if (and server-buffer channel) 6301 (if (and server-buffer channel)
6270 (erc-cmd-JOIN channel) 6302 (erc-cmd-JOIN channel)
diff --git a/man/ChangeLog b/man/ChangeLog
index 7431f616638..bcdbeac7bc4 100644
--- a/man/ChangeLog
+++ b/man/ChangeLog
@@ -1,3 +1,7 @@
12007-04-01 Michael Olson <mwolson@gnu.org>
2
3 * erc.texi: Update for the ERC 5.2 release.
4
12007-03-31 David Kastrup <dak@gnu.org> 52007-03-31 David Kastrup <dak@gnu.org>
2 6
3 * woman.texi (Topic, Interface Options): Explain changes semantics of 7 * woman.texi (Topic, Interface Options): Explain changes semantics of
diff --git a/man/erc.texi b/man/erc.texi
index 60c682b892f..3f9f506bef8 100644
--- a/man/erc.texi
+++ b/man/erc.texi
@@ -12,7 +12,7 @@
12@syncodeindex fn cp 12@syncodeindex fn cp
13 13
14@copying 14@copying
15This manual is for ERC version 5.2 stable pre-release. 15This manual is for ERC version 5.2.
16 16
17Copyright @copyright{} 2005, 2006, 2007 Free Software Foundation, Inc. 17Copyright @copyright{} 2005, 2006, 2007 Free Software Foundation, Inc.
18 18
@@ -21,6 +21,9 @@ Permission is granted to copy, distribute and/or modify this document
21under the terms of the GNU Free Documentation License, Version 1.2 or 21under the terms of the GNU Free Documentation License, Version 1.2 or
22any later version published by the Free Software Foundation; with no 22any later version published by the Free Software Foundation; with no
23Invariant Sections, Front-Cover texts, or Back-Cover Texts. 23Invariant Sections, Front-Cover texts, or Back-Cover Texts.
24
25All Emacs Lisp code contained in this document may be used, distributed,
26and modified without restriction.
24@end quotation 27@end quotation
25@end copying 28@end copying
26 29
@@ -68,12 +71,16 @@ Obtaining ERC
68* Releases:: Released versions of ERC. 71* Releases:: Released versions of ERC.
69* Development:: Latest unreleased development changes. 72* Development:: Latest unreleased development changes.
70 73
74Getting Started
75
76* Sample Session:: Example of connecting to the #emacs channel
77* Special Features:: Differences from standalone IRC clients
78
71Advanced Usage 79Advanced Usage
72 80
73* Connecting:: Ways of connecting to an IRC server. 81* Connecting:: Ways of connecting to an IRC server.
74* Options:: Options that are available for ERC.
75* Tips and Tricks:: Ways of enhancing your ERC experience.
76* Sample Configuration:: An example configuration file. 82* Sample Configuration:: An example configuration file.
83* Options:: Options that are available for ERC.
77 84
78@end detailmenu 85@end detailmenu
79@end menu 86@end menu
@@ -111,8 +118,17 @@ It comes with the following capabilities enabled by default.
111* Development:: Latest unreleased development changes. 118* Development:: Latest unreleased development changes.
112@end menu 119@end menu
113 120
114These sections may be skipped if you are using the version of ERC that 121Note that some ERC files are not included with Emacs due to copyright or
115comes with Emacs. 122dependency issues. If desired, they may be found at the following
123locations, or from your local GNU mirror.
124
125@itemize @bullet
126@item @uref{http://ftp.gnu.org/gnu/erc/erc-5.2-extras.tar.gz}
127@item @uref{http://ftp.gnu.org/gnu/erc/erc-5.2-extras.zip}
128@end itemize
129
130The rest of this chapter may be skipped if you are using the version of
131ERC that comes with Emacs.
116 132
117@node Releases, Development, Obtaining ERC, Obtaining ERC 133@node Releases, Development, Obtaining ERC, Obtaining ERC
118@comment node-name, next, previous, up 134@comment node-name, next, previous, up
@@ -131,7 +147,7 @@ available in the official Debian repository.
131 147
132@cindex releases, from source 148@cindex releases, from source
133Alternatively, you can download the latest release from 149Alternatively, you can download the latest release from
134@uref{http://ftp.gnu.org/gnu/erc}. 150@uref{http://ftp.gnu.org/gnu/erc}, or your local GNU mirror.
135 151
136@node Development, , Releases, Obtaining ERC 152@node Development, , Releases, Obtaining ERC
137@comment node-name, next, previous, up 153@comment node-name, next, previous, up
@@ -188,9 +204,9 @@ tla update
188 204
189@end enumerate 205@end enumerate
190 206
191If you are new to Arch and want to learn more about developing with it, 207If you are new to Arch and want to learn more about developing ERC with
192you might find this tutorial helpful: 208it, visit @uref{http://emacswiki.org/cgi-bin/wiki/ErcDevelopment} for
193@uref{http://www.mwolson.org/projects/ArchTutorial.html}. 209full instructions.
194 210
195@subheading Development snapshots 211@subheading Development snapshots
196 212
@@ -261,8 +277,6 @@ locations that require this.
261@chapter Getting Started 277@chapter Getting Started
262@cindex settings 278@cindex settings
263 279
264@c PRE5_2: Mention .ercrc.el
265
266To use ERC, add the directory containing its files to your 280To use ERC, add the directory containing its files to your
267@code{load-path} variable, in your @file{.emacs} file. Then, load ERC 281@code{load-path} variable, in your @file{.emacs} file. Then, load ERC
268itself. An example follows. 282itself. An example follows.
@@ -274,20 +288,151 @@ itself. An example follows.
274Once ERC is loaded, the command @kbd{M-x erc} will start ERC and 288Once ERC is loaded, the command @kbd{M-x erc} will start ERC and
275prompt for the server to connect to. 289prompt for the server to connect to.
276 290
291If you want to place ERC settings in their own file, you can place them
292in @file{~/.emacs.d/.ercrc.el}, creating it if necessary.
293
294If you would rather use the Customize interface to change how ERC works,
295do @kbd{M-x customize-group RET erc RET}. In particular, ERC comes with
296lots of modules that may be enabled or disabled; to select which ones
297you want, do @kbd{M-x customize-variable RET erc-modules RET}.
298
299@menu
300* Sample Session:: Example of connecting to the #emacs channel
301* Special Features:: Differences from standalone IRC clients
302@end menu
303
304@node Sample Session, Special Features, Getting Started, Getting Started
305@comment node-name, next, previous, up
306@section Sample Session
307
308This is an example ERC session which shows how to connect to the #emacs
309channel on Freenode. Another IRC channel on Freenode that may be of
310interest is #erc, which is a channel where ERC users and developers hang
311out.
312
313@itemize @bullet
314
315@item Connect to Freenode
316
317Run @kbd{M-x erc}. Use ``irc.freenode.net'' as the IRC server, ``6667''
318as the port, and choose a nickname.
319
320@item Get used to the interface
321
322Switch to the ``irc.freenode.net:6667'' buffer, if you're not already
323there. You will see first some messages about checking for ident, and
324then a bunch of other messages that describe the current IRC server.
325
326@item Join the #emacs channel
327
328In that buffer, type ``/join SPC #emacs'' and hit @kbd{RET}. Depending
329on how you've set up ERC, either a new buffer for ``#emacs'' will be
330displayed, or a new buffer called ``#emacs'' will be created in the
331background. If the latter, switch to the ``#emacs'' buffer. You will
332see the channel topic and a list of the people who are currently on the
333channel.
334
335@item Register your nickname with Freenode
336
337If you would like to be able to talk with people privately on the
338Freenode network, you will have to ``register'' your nickname. To do
339so, switch to the ``irc.freenode.net:6667'' buffer and type ``/msg
340NickServ register <password>'', replacing ``<password>'' with your
341desired password. It should tell you that the operation was successful.
342
343@item Talk to people in the channel
344
345If you switch back to the ``#emacs'' buffer, you can type a message, and
346everyone on the channel will see it.
347
348@item Open a query buffer to talk to someone
349
350If you want to talk with someone in private (this should usually not be
351done for technical help, only for personal questions), type ``/query
352<nick>'', replacing ``<nick>'' with the nickname of the person you would
353like to talk to. Depending on how ERC is set up, you will either see a
354new buffer with the name of the person, or such a buffer will be created
355in the background and you will have to switch to it. Begin typing
356messages, and you will be able to have a conversation.
357
358Note that if the other person is not registered, you will not be able to
359talk with them.
360
361@end itemize
362
363@node Special Features, , Sample Session, Getting Started
364@comment node-name, next, previous, up
365@section Special Features
366
367ERC has some features that distinguish it from some IRC clients.
368
369@itemize @bullet
370
371@item multiple channels and multiple servers
372
373Every channel is put in a separate buffer. Several IRC servers may be
374connected to at the same time.
375
376@cindex query buffers
377@item private message separation
378
379Private conversations are treated as channels, and are put into separate
380buffers in Emacs. We call these ``query buffers''.
381
382@item highlighting
383
384Some occurences of words can be highlighted, which makes it easier to
385track different kinds of conversations.
386
387@item notification
388
389ERC can notify you that certain users are online.
390
391@item channel tracking
392
393Channels can be hidden and conversation continue in the background. You
394are notified when something is said in such a channel that is not
395currently visible. This makes it easy to get Real Work done while still
396maintaining an IRC presence.
397
398@item nick completion
399
400ERC can complete words upon hitting @kbd{TAB}, which eases the writing
401of nicknames in messages.
402
403@cindex history ring
404@item history
405
406Past actions are kept in history rings for future use. To navigate a
407history ring, hit @kbd{M-p} to go backwards and @kbd{M-n} to go
408forwards.
409
410@item multiple languages
411
412Different channels and servers may have different language encodings.
413
414In addition, it is possible to translate the messages that ERC uses into
415multiple languages. Please contact the developers of ERC at
416@email{erc-discuss@@gnu.org} if you are interested in helping with the
417translation effort.
418
419@item user scripting
420
421Users can load scripts (e.g. auto greeting scripts) when ERC starts up.
422
423It is also possible to make custom IRC commands, if you know a little
424Emacs Lisp. Just make an Emacs Lisp function and call it
425@code{erc-cmd-NEWCOMMAND}, where @code{NEWCOMMAND} is the name of the
426new command in capital letters.
427
428@item auto reconnect
429
277If the connection goes away at some point, ERC will try to reconnect 430If the connection goes away at some point, ERC will try to reconnect
278automatically. If it fails to reconnect, and you want to try to 431automatically. If it fails to reconnect, and you want to try to
279manually reestablish the connection at some later point, switch to an 432manually reestablish the connection at some later point, switch to an
280ERC buffer and run the /RECONNECT command. 433ERC buffer and run the @code{/RECONNECT} command.
281 434
282@c PRE5_2: Sample session, including: 435@end itemize
283@c - connect to Freenode
284@c - /join #emacs
285@c - see messages flying past, point out topic lines, messages, channel
286@c members
287@c - identifying your nick with NickServ (most IRC servers have this)
288@c - talking to the channel
289@c - open a /query buffer to talk to someone (must identify first in
290@c FreeNode)
291 436
292 437
293@node Keystroke Summary, Modules, Getting Started, Top 438@node Keystroke Summary, Modules, Getting Started, Top
@@ -439,6 +584,10 @@ Save buffers in logs
439@item match 584@item match
440Highlight pals, fools, and other keywords 585Highlight pals, fools, and other keywords
441 586
587@cindex modules, menu
588@item menu
589Display a menu in ERC buffers
590
442@cindex modules, netsplit 591@cindex modules, netsplit
443@item netsplit 592@item netsplit
444Detect netsplits 593Detect netsplits
@@ -505,7 +654,7 @@ Translate morse code in messages
505 654
506@end table 655@end table
507 656
508@c PRE5_2: Document every option of every module in its own subnode 657@c PRE5_3: Document every option of every module in its own subnode
509 658
510 659
511@node Advanced Usage, Getting Help and Reporting Bugs, Modules, Top 660@node Advanced Usage, Getting Help and Reporting Bugs, Modules, Top
@@ -515,12 +664,11 @@ Translate morse code in messages
515 664
516@menu 665@menu
517* Connecting:: Ways of connecting to an IRC server. 666* Connecting:: Ways of connecting to an IRC server.
518* Options:: Options that are available for ERC.
519* Tips and Tricks:: Ways of enhancing your ERC experience.
520* Sample Configuration:: An example configuration file. 667* Sample Configuration:: An example configuration file.
668* Options:: Options that are available for ERC.
521@end menu 669@end menu
522 670
523@node Connecting, Options, Advanced Usage, Advanced Usage 671@node Connecting, Sample Configuration, Advanced Usage, Advanced Usage
524@comment node-name, next, previous, up 672@comment node-name, next, previous, up
525@section Connecting to an IRC Server 673@section Connecting to an IRC Server
526@cindex connecting 674@cindex connecting
@@ -654,33 +802,97 @@ User full name.
654This can be either a string or a function to call. 802This can be either a string or a function to call.
655@end defopt 803@end defopt
656 804
657@node Options, Tips and Tricks, Connecting, Advanced Usage 805@node Sample Configuration, Options, Connecting, Advanced Usage
658@comment node-name, next, previous, up 806@comment node-name, next, previous, up
659@section Options 807@section Sample Configuration
660@cindex options 808@cindex configuration, sample
661 809
662@c PRE5_2: (Node) Document every ERC option (module options go in 810Here is an example of configuration settings for ERC. This can go into
663@c previous chapter) 811your Emacs configuration file. Everything after the @code{(require
812'erc)} command can optionally go into @file{~/.emacs.d/.ercrc.el}.
664 813
665This section has not yet been written. 814@lisp
815;;; Sample ERC configuration
666 816
667@node Tips and Tricks, Sample Configuration, Options, Advanced Usage 817;; Add the ERC directory to load path -- you don't need this if you are
668@comment node-name, next, previous, up 818;; using the version of ERC that comes with Emacs
669@section Tips and Tricks 819(add-to-list 'load-path "~/elisp/erc")
670@cindex tips and tricks
671 820
672@c PRE5_2: (Node) Tips and tricks 821;; Load ERC
822(require 'erc)
673 823
674This section has not yet been written. 824;; Load authentication info from an external source. Put sensitive
825;; passwords and the like in here.
826(load "~/.emacs.d/.erc-auth")
827
828;; This is an example of how to make a new command. Type "/uptime" to
829;; use it.
830(defun erc-cmd-UPTIME (&rest ignore)
831 "Display the uptime of the system, as well as some load-related
832stuff, to the current ERC buffer."
833 (let ((uname-output
834 (replace-regexp-in-string
835 ", load average: " "] @{Load average@} ["
836 ;; Collapse spaces, remove
837 (replace-regexp-in-string
838 " +" " "
839 ;; Remove beginning and trailing whitespace
840 (replace-regexp-in-string
841 "^ +\\|[ \n]+$" ""
842 (shell-command-to-string "uptime"))))))
843 (erc-send-message
844 (concat "@{Uptime@} [" uname-output "]"))))
845
846;; This causes ERC to connect to the Freenode network upon hitting
847;; C-c e f. Replace MYNICK with your IRC nick.
848(global-set-key "\C-cef" (lambda () (interactive)
849 (erc :server "irc.freenode.net" :port "6667"
850 :nick "MYNICK")))
851
852;; This causes ERC to connect to the IRC server on your own machine (if
853;; you have one) upon hitting C-c e b. Replace MYNICK with your IRC
854;; nick. Often, people like to run bitlbee (http://bitlbee.org/) as an
855;; AIM/Jabber/MSN to IRC gateway, so that they can use ERC to chat with
856;; people on those networks.
857(global-set-key "\C-ceb" (lambda () (interactive)
858 (erc :server "localhost" :port "6667"
859 :nick "MYNICK")))
860
861;; Make C-c RET (or C-c C-RET) send messages instead of RET. This has
862;; been commented out to avoid confusing new users.
863;; (define-key erc-mode-map (kbd "RET") nil)
864;; (define-key erc-mode-map (kbd "C-c RET") 'erc-send-current-line)
865;; (define-key erc-mode-map (kbd "C-c C-RET") 'erc-send-current-line)
866
867;;; Options
868
869;; Join the #emacs and #erc channels whenever connecting to Freenode.
870(setq erc-autojoin-channels-alist '(("freenode.net" "#emacs" "#erc")))
871
872;; Interpret mIRC-style color commands in IRC chats
873(setq erc-interpret-mirc-color t)
874
875;; The following are commented out by default, but users of other
876;; non-Emacs IRC clients might find them useful.
877;; Kill buffers for channels after /part
878;; (setq erc-kill-buffer-on-part t)
879;; Kill buffers for private queries after quitting the server
880;; (setq erc-kill-queries-on-quit t)
881;; Kill buffers for server messages after quitting the server
882;; (setq erc-kill-server-buffer-on-quit t)
883@end lisp
675 884
676@node Sample Configuration, , Tips and Tricks, Advanced Usage 885@node Options, , Sample Configuration, Advanced Usage
677@comment node-name, next, previous, up 886@comment node-name, next, previous, up
678@section Sample Configuration 887@section Options
679@cindex configuration, sample 888@cindex options
680 889
681@c PRE5_2: (Node) Sample configs 890@c PRE5_3: (Node) Document every ERC option (module options go in
891@c previous chapter)
682 892
683This section has not yet been written. 893This section has not yet been written. For now, the easiest way to
894check out the available option for ERC is to do
895@kbd{M-x customize-group erc RET}.
684 896
685 897
686@node Getting Help and Reporting Bugs, History, Advanced Usage, Top 898@node Getting Help and Reporting Bugs, History, Advanced Usage, Top