-
Notifications
You must be signed in to change notification settings - Fork 0
/
ERC-NEWS
2459 lines (1813 loc) · 102 KB
/
ERC-NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
ERC NEWS
Copyright (C) 2006-2024 Free Software Foundation, Inc.
See the end of the file for license conditions.
Please send ERC bug reports to 'bug-gnu-emacs@gnu.org',
and Cc the 'emacs-erc@gnu.org' mailing list as well.
If possible, use 'M-x erc-bug' or 'M-x report-emacs-bug'.
This file is about changes in ERC, the powerful, modular, and
extensible IRC (Internet Relay Chat) client distributed with
GNU Emacs since Emacs version 22.1.
* Changes in ERC 5.6
** Module 'keep-place' has a more decorative cousin.
Remember your place in ERC buffers a bit more easily with the help of
a configurable, visible indicator. Optionally sync the indicator to
any progress made while you haven't yet caught up to the live stream.
See options 'erc-keep-place-indicator-style' and friends, and try M-x
keep-place-indicator-mode to see it in action.
** Module 'fill' offers an adaptive style based on 'visual-line-mode'.
This style dynamically wraps messages to a window's width while
mimicking the "hanging indent" look of 'erc-fill-static'. It also
provides some movement and editing commands to optionally tame the
less familiar aspects of 'visual-line' behavior. An interactive
helper called 'erc-fill-wrap-nudge' makes easy work of adjusting the
overhang on the fly. Set 'erc-fill-function' to 'erc-fill-wrap' to
get started.
** A module for nickname highlighting has joined ERC.
Automatic nickname coloring has come to ERC core. Users familiar with
'erc-hl-nicks', from which this module directly descends, will already
be familiar with its suite of handy options. By default, each
nickname in an ERC session receives a unique face with a unique (or
uniformly dealt) foreground color. Add 'nicks' to 'erc-modules' to
get started.
** A unified interactive entry point.
New users are often dismayed to discover that M-x ERC doesn't connect
to its default network, Libera.Chat, over TLS. Though perhaps a
decade overdue, this is no longer the case. Other UX improvements in
this area aim to make the process of connecting interactively slightly
more streamlined and less repetitive, even for veteran users.
** Revised buffer-display handling.
A point of friction for new users and one only just introduced with
ERC 5.5 has been the lack of visual feedback when first connecting via
M-x erc or when issuing a "/JOIN" command at the prompt. As explained
below, in the news for 5.5, the discovery of a security issue led to
most new ERC buffers being "buried" on creation. On further
reflection, this was judged to have been an overcorrection in the case
of interactive invocations, hence the borrowing of an old option,
'erc-query-display', and the bestowing of a new alias,
'erc-interactive-display', which better describes its expanded role as
a more general buffer-display knob for interactive commands ("/QUERY"
still among them).
Accompanying this addition are "display"-suffixed aliases for related
options 'erc-join-buffer' and 'erc-auto-query', which users have
reported as being difficult to discover and remember. When the latter
option (now known as 'erc-receive-query-display') is nil, ERC uses
'erc-join-buffer' in its place, much like it does for
'erc-interactive-display'. The old nil behavior can still be gotten
via the new compatibility flag 'erc-receive-query-display-defer'. The
relatively new option 'erc-reconnect-display' has likewise been
renamed, this time for clarity, to 'erc-auto-reconnect-display'.
This release also introduces a few subtleties affecting the display of
new or reassociated buffers. One involves buffers that already occupy
the selected window. ERC now treats these as deserving of an implicit
'bury'. An escape hatch for this and most other baked-in behaviors is
now available in the form of a new type variant recognized by all such
options. That is, users can now specify their own function to
exercise full control over nearly all buffer-display related
decisions. See the newly expanded doc strings of 'erc-buffer-display'
and friends, as well as Info node '(erc) display-buffer', for details.
** Setting a module's mode variable via Customize earns a warning.
Trying and failing to activate a module via its minor mode's Custom
widget has been an age-old annoyance for new users. Previously
ineffective, this method now actually works, but it also admonishes
users to edit the 'erc-modules' widget instead.
** ERC's status-sidebar has gained an accompanying module.
Users can now add 'bufbar' to 'erc-modules' to achieve the same effect
as toggling 'erc-status-sidebar-open' manually at the start of an IRC
session. The module has also been outfitted to show channels and
queries under their servers by default. To avoid confusion, the major
mode for the actual sidebar buffer itself, 'erc-status-sidebar-mode',
is no longer available interactively.
** A new spin on a classic integration in erc-speedbar.
Add 'nickbar' to 'erc-modules' to spawn a dynamically updating side
window listing all the users in any target buffer. It's powered by
the same speedbar.el integration you've always known, except this
one's optionally accessible from the keyboard, just like any other
side window. Hit '<RET>' over a nick to spawn a "/QUERY" or a
"Lastlog" (Occur) session. See 'erc-nickbar-mode' for more.
** New 'querypoll' module for tracking non-channel query participants.
ERC has gotten a bit pickier about managing participants in query
buffers. "Untracked" correspondents no longer appear automatically in
membership tables, even if you respond or initiate contact. Instead,
ERC only adds and removes participant data when these same users join
and leave channels. Anyone uncomfortable with the apparent
uncertainty this brings can look to the new 'querypoll' module, which
periodically sends WHO requests to keep track of correspondents.
Those familiar with the IRCv3 Monitor extension can think of this as
"fallback code" and a temporary placeholder for the real thing.
Add 'querypoll' (and 'nickbar') to 'erc-modules' to try it out.
** Option 'erc-timestamp-use-align-to' made more versatile.
While this option has always offered to right-align stamps via the
'display' text property, it's now more effective at doing so when set
to a number indicating an offset from the right edge. Users of the
'log' module may want to customize 'erc-log-filter-function' to
'erc-stamp-prefix-log-filter' to avoid ragged right-hand stamps
appearing in their saved logs.
** Awkward entry point 'erc-server-select' improved but deprecated.
The alternate entry point 'erc-server-select' has mainly served to
confuse users in more recent years because it requires certain
options, like 'erc-nick', to be configured ahead of time, and it
doesn't support TLS. Its main selling point, historically, has been
interactive completion based on the option 'erc-server-alist', which
is a table of networks, servers, and ports. But most of the option's
400-odd entries are sadly defunct or otherwise outdated. And, these
days, most networks promote a well known load-balancing end point over
individual servers anyway. Regardless, the command has now been
improved to prompt for the same slate of parameters sought by
'erc-tls'. Similarly, 'erc-server-alist' entries now support a fifth
member in TLS ports (though this option too has been deprecated). If
you feel these deprecations rash or unwarranted, please file a bug
report and petition the maintainers for a reprieve.
** Smarter reconnect handling for users on the move.
ERC now offers a new, experimental reconnect strategy in the function
'erc-server-delayed-check-reconnect', which tests for underlying
connectivity before attempting to reconnect in earnest. See option
'erc-server-reconnect-function' and new local module 'services-regain'
(also experimental) to get started.
** Module-based keybinding adjustments for major modes.
To put it another way, simply loading a built-in module's library no
longer modifies 'erc-mode-map'. Instead, modifications occur during
module setup. This should not impact most user configs since ERC
doesn't bother with keys already taken and only removes bindings it's
previously created. Note that while all affected bindings still
reside in 'erc-mode-map', future built-in modules will use their own
minor-mode maps, and new third-party modules should do the same.
** Option 'erc-timestamp-format-right' deprecated.
Having to account for this option prevented other ERC modules from
easily determining what right-sided stamps would look like before
insertion, which is knowledge needed for certain UI decisions. The
way ERC has chosen to address this is imperfect and boils down to
asking users who've customized this option to switch to
'erc-timestamp-format' instead. If you're affected by this and feel
that some other solution, like automatic migration, is justified,
please make that known on the bug list.
** Module 'command-indicator' revives echoing, replacing 'noncommands'.
Command-line echoing has returned to ERC after a near decade-long
hiatus. This means you can elect to have ERC leave a trail of (most)
slash-command input submitted at the prompt, in a manner resembling
that of a shell or a REPL. The particulars are likely of little
interest to most users, but the gist is that this functionality was
removed in 5.3.x (Emacs 24.5) without mention in this document or a
change log. Everything's mostly been restored, except that the
feature is now opt-in. The only real gotcha is that related faces and
options, like 'erc-command-indicator', have moved to the 'erc-goodies'
library, although their Custom groups remain the same. Add
'command-indicator' to 'erc-modules' to get started.
** Option 'erc-track-faces-normal-list' slightly more influential.
This option has always been a source of confusion for users, mainly
because its influence rode heavily on the makeup of faces in a given
message. Historically, when a buffer's current mode-line face was a
member of this option's value, ERC would only swap it out for a fellow
"normal" if it was absent from the message being processed. Beginning
with this release, ERC now looks to other ranked and, if necessary,
unranked "normals" instead of sustaining the same face between
messages. This was done to better honor the stated purpose of the
option, which is to provide consistent visual feedback when buffer
activity occurs. If you experience problems with this development,
see the compatibility flag 'erc-track-ignore-normal-contenders-p'.
** 'erc-button-alist' and 'erc-nick-popup-alist' have evolved slightly.
It's no secret that the 'buttons' module treats potential nicknames
specially. This is perhaps most evident in its treatment of the
'nicknames' entry in 'erc-button-alist'. Indeed, to simplify ERC's
move to next-gen "rich UI" extensions, this special treatment is being
canonized. From here on out, this entry will no longer appear in the
option's default value but will instead be applied implicitly so long
as the option 'erc-button-buttonize-nicks' is non-nil, which it is by
default. Relatedly, the option 'erc-nick-popup-alist' now favors
functions, which ERC calls non-interactively, over arbitrary
s-expressions, which ERC will continue to honor. Although the default
lineup remains functionally equivalent, its members have all been
updated accordingly.
** A slimmed down 'erc-track-faces-priority-list'.
This option, along with 'erc-track-faces-normal-list', has been purged
of certain 'button'-related face combinations. Originally added in
ERC 5.3, these combinations described the effect of "buttonizing" atop
faces added by the 'match' module, like '(erc-nick-default-face
erc-pal-face)'. However, since at least Emacs 27, 'match' has run
before 'button' in 'erc-insert-modify-hook', meaning such permutations
aren't possible.
More importantly, users who've customized either of these options
should update them with the new default value of the option
'erc-button-nickname-face'. Like 'erc-nick-default-face', which it
replaces, the new 'erc-button-nick-default-face' is also a "real"
face. Its sole reason for existing is to make it easier for users and
modules to distinguish between basic buttonized faces and
'erc-nick-default-face', which is now reserved to mean the base
"speaker" face.
** Option 'erc-query-on-unjoined-chan-privmsg' restored and renamed.
This option was accidentally removed from the default client in ERC
5.5 and was thus prevented from influencing PRIVMSG routing. It's now
been restored with a slightly revised role contingent on a few
assumptions explained in its doc string. For clarity, it has been
renamed 'erc-ensure-target-buffer-on-privmsg'.
** A smarter, more responsive prompt.
ERC's prompt can be told to respond dynamically to incoming and
outgoing messages by leveraging the familiar function variant of the
option 'erc-prompt'. With this release, only predefined functions can
take full advantage of this new dynamism, but an interface to empower
third parties with the same possibilities may follow suit. To get
started, customize 'erc-prompt' to 'erc-prompt-format', and see the
option of the same name ('erc-prompt-format') for a rudimentary
templating facility reminiscent of 'erc-mode-line-format'.
** Module 'scrolltobottom' now optionally more aggressive.
Enabling the experimental option 'erc-scrolltobottom-all' makes ERC
more vigilant about staking down the input area in all ERC windows.
And the option's 'relaxed' variant makes ERC's prompt stationary
wherever it happens to reside instead of forcing it to the bottom of a
window, meaning new input appears above the prompt, scrolling existing
messages upward to compensate.
** Subtle changes for two fundamental faces.
Users of the default theme may notice that 'erc-action-face' and
'erc-notice-face' now appear slightly less bold. This improves button
detection and spares users from having to tweak faces (or options,
like 'erc-notice-highlight-type') just to achieve this effect. The
change is currently most noticeable in "/ME" messages, where
'erc-action-face' appears beneath 'erc-input-face' and
'erc-my-nick-face'.
** Fewer nick buttons in QUIT, JOIN, and PART messages.
Common messages that show a nickname followed by a "userhost" often
end up with redundant buttons because the nick reappears in or is the
same as the "~user" portion. ERC now tamps down on this to make
<TAB>ing around more convenient. To opt out, see the new variable
'erc-button-highlight-nick-once'.
** Improved interplay between buffer truncation and message logging.
While most of these improvements are subtle, some affect everyday use.
For example, users of the 'truncate' module may notice that truncation
now happens between messages rather than arbitrary lines. And those
with the default 'erc-insert-timestamp-left-and-right' for their
'erc-insert-timestamp-function' will see date stamps reprinted after
every "/CLEAR" but omitted from any logs. One notable casualty of
these changes has been the deprecation of the ancient option
'erc-truncate-buffer-on-save'. Users of the 'log' module can achieve
the same effect by issuing a "/CLEAR" at the prompt.
** The 'truncate' module no longer enables logging automatically.
Users expecting 'truncate' to perform logging based on the option
'erc-enable-logging' need to instead add 'log' to 'erc-modules' for
continued integration. Under the original design, merely loading the
library 'erc-log' caused 'truncate' to start writing logs, possibly
against a user's wishes.
** The function 'erc-echo-timestamp' is now a command.
The option 'erc-echo-timestamps' (plural) has always enabled the
contextual printing of timestamps to the echo area when moving between
messages in an ERC buffer. Similar functionality is now available on
demand by invoking the newly interactive function 'erc-echo-timestamp'
atop any message. The new companion option 'erc-echo-timestamp-zone'
determines the default timezone when not specified with a prefix
argument.
** Option 'erc-remove-parsed-property' deprecated.
This option's nil behavior serves no practical purpose yet has the
potential to degrade the user experience by competing for space with
forthcoming features powered by next generation extensions. Anyone
with a legitimate use for this option likely also possesses the
knowledge to rig up a suitable analog with minimal effort. That said,
the road to removal is long.
** The 'track' module always ignores date stamps.
Users of the stamp module who leave 'erc-insert-timestamp-function'
set to its default of 'erc-insert-timestamp-left-and-right' will find
that date stamps no longer affect the mode line, even for IRC commands
not included in 'erc-track-exclude-types'.
** Option 'erc-warn-about-blank-lines' is more informative.
Enabled by default, this option now produces more useful feedback
whenever ERC rejects prompt input containing whitespace-only lines.
When paired with option 'erc-send-whitespace-lines', ERC echoes a
tally of blank lines padded and trailing blanks culled.
** A context-dependent mode segment in header and mode lines.
The "%m" specifier has traditionally expanded to a lone "+" in server
and query buffers and a string containing all switch modes (plus
"limit" and "key" args) in channel buffers. It now becomes a string
of user modes in server buffers and disappears completely in query
buffers. In channels, it's grown to include all letters and their
possibly truncated arguments, with the exception of stateful list
modes, like "b".
** In-buffer "status messages" are now a thing.
The ancient option 'erc-ensure-target-buffer-on-privmsg' has been
repurposed slightly to express a third state denoted by the symbol
'status'. It tells ERC to revert to the old default behavior in which
separate, "pseudo" target buffers for status-prefixed conversing
co-existed alongside actual target buffers. Instead of this awkward
arrangement, ERC now acts like other clients by default and inserts
so-called "status messages" in situ, right between other messages.
Similar insertion-routing behavior now also applies to CTCP ACTIONs
directed at status-prefixed channels. Unfortunately, outgoing "/msg
@#chan hi" messages aren't yet shown in the same fashion, but the
groundwork has been laid, making such an addition almost trivial.
** An easier way to see channel-membership prefixes on speakers.
The option 'erc-format-@nick' has been deprecated in favor of the new
boolean option 'erc-show-speaker-membership-status', a simple switch
to enable the displaying of status prefixes on the speaker nicks of
incoming chat messages. Prefixes on your speaker nick for outgoing
chat messages continue to always be present.
** Updating user options requires cycling associated minor modes.
During a live ERC session, you may need to disable and re-enable a
module's minor mode via 'M-x erc-foo-mode RET' or similar before an
option's updated value takes effect. This primarily impacts new
options introduced by this release and existing ones whose behavior
has changed in some way. At present, ERC does not perform this step
automatically on your behalf, even if a change was made in a
'Custom-mode' buffer or via 'setopt'.
** New broadcast-oriented slash commands /AME, /GME, and /GMSG.
Also available as the library functions 'erc-cmd-AME', 'erc-cmd-GME',
and 'erc-cmd-GMSG', these new slash commands can prove handy in test
environments.
** New face 'erc-information' for local administrative messages.
Messages not originating from a server have historically been shown in
'erc-notice-face', sometimes in combination with 'erc-error-face'.
Neither are well suited for local messages of moderate importance.
From now on, such messages will appear in a more muted color but
retain the familiar 'erc-notice-prefix' stars.
** Miscellaneous UX changes.
Some minor quality-of-life niceties have finally made their way to
ERC. For example, fool visibility has become togglable with the new
command 'erc-match-toggle-hidden-fools'. The 'button' module's
'erc-button-previous' command now moves to the beginning instead of
the end of buttons. A new command, 'erc-news', can be invoked to
visit this very file. And the 'irccontrols' module now supports
additional colors and special handling for "spoilers" (hidden text).
** Changes in the library API.
*** Some top-level dependencies have been removed.
The library 'erc-goodies' is no longer loaded by ERC's main library.
This was done to further cement the move toward a unidirectional
dependency flow begun in 5.5. Additionally, a few barely used and
newly introduced dependencies are now lazily loaded, which may upset
some third-party code. The first of these is 'pp' because its
'pp-to-string' is autoloaded in all supported ERC versions. Also gone
are 'thingatpt', 'time-date', and 'iso8601'. All were used ultra
sparingly, and the latter two have only been around for one minor
release cycle, so their removal hopefully won't cause much churn.
*** Some ERC-applied text properties have changed.
Chiefly, a new set of metadata-oriented properties, the details of
which should be considered internal, now occupy the first character of
all inserted messages, including local notices, date stamps, and
interactive feedback. These properties will likely form the basis for
a new message-traversal/insertion/deletion API in future versions.
Less impactfully, the no-op property 'rear-sticky' has been removed,
and the value of the 'field' property for ERC's prompt has changed
from 't' to the more useful 'erc-prompt', although the property of the
same name has been retained and now has a value of 'hidden' when
disconnected.
*** Flattened face lists for buttonized text.
Previously, when "buttonizing" a new region, ERC would combine faces
by blindly consing the new onto the existing. In theory, this kept a
nice record of all modifications to a given region. However, it also
complicated life for other modules wanting to analyze and operate on
these regions. Beginning with this release, ERC now merges combined
faces together when creating buttons, although the odd nested list may
still crop up here and there.
*** Members of insert- and send-related hooks have been reordered.
As anyone reading this is no doubt aware, both built-in and
third-party modules rely on certain hooks for adjusting incoming and
outgoing messages upon insertion. And some modules only want to do so
after others have done their damage. Traditionally, this has required
various hacks and finagling to achieve. And while this release makes
an effort to load modules in a more consistent order, that alone isn't
enough to ensure predictability among essential members of important
hooks.
Luckily, ERC now leverages a feature introduced in Emacs 27, "hook
depth," to secure the positions of a few key members of
'erc-insert-modify-hook' and 'erc-send-modify-hook'. So far, this
includes the functions 'erc-button-add-buttons', 'erc-match-message',
'erc-fill', and 'erc-add-timestamp', which now appear in that order,
when present, at depths beginning at 20 and ending below 80. Of most
interest to module authors is the new relative positioning of the
first three, which have been rotated leftward with respect to their
previous places in recent ERC versions (fill, button, match ,stamp).
A similar designated range from -80 to -20 also exists and is home to
the function 'erc-controls-highlight'.
ERC also provisionally reserves the same depth intervals for
'erc-insert-pre-hook' and possibly other, similar hooks, but will
continue to modify non-ERC hooks locally whenever possible, especially
in new code.
*** A singular entry point for inserting messages.
Displaying "local" messages, like help text and interactive-command
feedback, in ERC buffers has never been straightforward. As such,
ancient patterns, like the pairing of preformatted "notice" text with
ERC's oldest insertion function, 'erc-display-line', still appear
quite frequently in the wild despite having been largely phased out of
ERC's own code base in 2002. That this example has endured makes some
sense because it's probably seen as less cumbersome than fiddling with
the more powerful and complicated 'erc-display-message'.
The latest twist in this tale comes with this release, for which a
healthy helping of "pre-insertion" business has permanently ensconced
itself in none other than 'erc-display-message'. While this would
seem to put antiquated patterns, like the above mentioned
'erc-make-notice' combo, at risk of having messages ignored or subject
to degraded treatment by built-in modules, an adaptive measure has
been introduced that recasts 'erc-display-line' as a thin wrapper
around 'erc-display-message'. And though nothing of the sort has been
done for the lower-level 'erc-display-line-1' (now an obsolete alias
for 'erc-insert-line'), some last-ditch fallback code has been
introduced to guarantee baseline functionality. As always, if you
find these developments disturbing, please say so on the tracker.
*** ERC now manages timestamp-related properties a bit differently.
For starters, the 'cursor-sensor-functions' text property is absent by
default unless the option 'erc-echo-timestamps' is already enabled on
module init. And when present, the property's value no longer
contains unique closures and thus no longer proves effective for
traversing inserted messages. For now, ERC only provides an internal
means of visiting messages, but a public interface is forthcoming.
Also affecting the 'stamp' module is the deprecation of the function
'erc-insert-aligned' and its removal from the default client's code.
In the same library, the function 'erc-munge-invisibility-spec' has
been renamed to 'erc-stamp--manage-local-options-state' to better
reflect its purpose. Additionally, the module now merges its
'invisible' property with existing ones and includes all white space
around stamps when doing so.
This "propertizing" of surrounding white space extends to all
'stamp'-applied properties, like 'field', in all intervening space
between message text and timestamps. Technically, this constitutes a
breaking change from the perspective of detecting a timestamp's
bounds. However, ERC has always propertized leading space before
right-sided stamps on the same line as message text but not before
those folded onto the next line. Such inconsistency made stamp
detection overly complex and produced uneven results when toggling
stamp visibility.
*** Invisible message insertions not automatically made 'intangible'.
Previously, when 'erc-display-message' and friends spotted the
'invisible' text property with a value of t anywhere in text to be
inserted, it would apply that property to the entire message, along
with a t-valued 'intangible' property. Beginning with ERC 5.6, users
expecting this behavior will have to instead perform the treatment
themselves. To help with the transition, a temporary escape hatch has
been made available to regain this behavior, but its existence is only
guaranteed for this one minor version alone. See source code in the
vicinity of 'erc-insert-line' for more.
*** Date stamps have become independent messages.
ERC now inserts "date stamps" generated from the option
'erc-timestamp-format-left' as separate, standalone messages. This
currently only matters if 'erc-insert-timestamp-function' is set to
its default value of 'erc-insert-timestamp-left-and-right', however
plans exist to decouple these features. In any case, ERC's near-term
UI goals require exposing these stamps to existing code designed to
operate on complete messages. For example, users likely expect date
stamps to be togglable with 'erc-toggle-timestamps' while also being
immune to hiding from commands like 'erc-match-toggle-hidden-fools'.
Before this change, meeting such expectations demanded brittle
heuristics that checked for the presence of these stamps in the
leading portion of message bodies as well as special casing to act on
these areas without inflicting collateral damage.
Despite the rationale, this move admittedly ushers in a heightened
potential for disruption because third-party members of ERC's
modification hooks may not take kindly to encountering stamp-only
messages or the new behavior of 'erc-timestamp-last-inserted-left',
which no longer records the final trailing newline in the variable
'erc-timestamp-format-left'. If these inconveniences prove too
encumbering to deal with right away, see the escape hatch
'erc-stamp-prepend-date-stamps-p', which should help ease the
transition. As for detecting these new stamp-only messages from
members of 'erc-insert-modify-hook' and friends, see the function
'erc-stamp-inserting-date-stamp-p'.
*** The role of a module's Custom group is now more clearly defined.
Associating built-in modules with Custom groups and "provided" library
features has improved. More specifically, a module's group now enjoys
the singular purpose of determining where the module's minor mode
variable lives in the Customize interface. And although ERC is now
slightly more adept at linking these entities, third-parties are still
encouraged to keep a module's name aligned with its group's as well as
the provided feature of its containing library, if only for the usual
reasons of namespace hygiene and discoverability.
*** The function 'erc-open' no longer uses the 'TGT-LIST' parameter.
ERC has always used the parameter to initialize the local variable
'erc-default-recipients', which stores a list of routing targets with
the topmost considered "active." However, since at least ERC 5.1, a
buffer and its active target effectively mate for life, making
'TGT-LIST', in practice, a read-only list of a single target. And
because that target must also appear as the 'CHANNEL' parameter,
'TGT-LIST' mainly serves to reinforce 'erc-open's reputation of being
unruly.
*** ERC supports arbitrary CHANTYPES.
Specifically, channels can be prefixed with any predesignated
character, mainly to afford more flexibility to specialty services,
like bridges to other protocols.
*** 'erc-cmd-HELP' recognizes subcommands.
Some IRC "slash" commands are hierarchical and require users to
specify a subcommand to actually carry out anything of consequence.
Built-in modules can now provide more detailed help for a particular
subcommand by telling ERC to defer to a specialized handler. This
facility can be opened up to third parties should any one request it.
*** Message-formatting templates in 'notify' renamed.
All templates beginning with the prefix "erc-message-english-notify_"
have been renamed to begin with "erc-message-english-notify-". For
example, the variable 'erc-message-english-notify_current' is now
'erc-message-english-notify_current'. The old names have been
preserved as obsolete aliases.
*** Longtime quasi modules made proper.
The 'fill' module is now defined by 'define-erc-module'. The same
goes for ERC's imenu integration, which has 'imenu' now appearing in
the default value of 'erc-modules'.
*** Function 'erc-get-user-mode-prefix' renamed.
This utility has been renamed to 'erc-get-channel-membership-prefix'
to better reflect its role of delivering a formatted "status prefix",
like "+" (for "voice"), and to avoid confusion with user modes, like
"+i" (for "invisible"). Additionally, its lone parameter is now
overloaded to accept an 'erc-channel-user' object as well as a string.
*** Channel-membership table 'erc-channel-users' renamed.
Distinguishing between 'erc-channel-user' objects and values of the
'erc-channel-users' (plural) hash-table has been a constant source of
confusion, even within ERC's own code base. The hash-table's values
are cons cells whose CDR slot is an 'erc-channel-user'. To help keep
things sane, 'erc-channel-users' (plural) is now officially being
redubbed 'erc-channel-members'. Similarly, the utility function
'erc-get-channel-user' has been renamed to 'erc-get-channel-member'.
Expect deprecations of the old names to follow in a future release.
*** Query participant tables now depend on channel membership.
ERC has always been inconsistent and difficult to predict in its
handling of records describing other IRC users. This has made simple
things like detecting the online status of query peers and the
presence of one's own user in 'erc-server-users' especially
unreliable. From now on, ERC resolves to be more sensible and
conservative in such areas. For example, it now retains its own user
info, once discovered, for the remainder of a session. It also relies
solely on channel membership to "drive" query participant information.
That is, when another IRC user departs their last known channel, any
queries with them will consider them absent, even if they're likely
still online. Anyone with difficulty adapting to this new paradigm
should contact the mailing list to inquire about associated
compatibility flags, which can be made public on request. Also see
the related news item announcing the module 'querypoll'.
*** The 'erc-channel-user' struct has a changed internally.
The five boolean slots for membership prefixes have been folded
("encoded") into a single integer slot. However, the old 'setf'-able
accessors remain available, and the constructor's signature remains
unchanged. Since third-party code must be recompiled when upgrading
ERC anyway, users shouldn't experience any churn. The only caveat is
that third-party code using the literal read-syntax of these objects,
for example, in unit tests, will have to be updated.
*** Hidden messages contain a preceding rather than trailing newline.
ERC has traditionally only offered to hide messages involving fools,
but plans are to make hiding more powerful. Anyone depending on the
existing behavior should be aware that hidden messages now start and
end one character earlier, so that hidden line endings precede rather
than follow accompanying text. However, an escape hatch is available
in the variable 'erc-legacy-invisible-bounds-p'. It reinstates the
old behavior, which is unsupported by newer modules and features.
*** 'erc-display-message' optionally combines faces.
Users may notice that ERC now inserts some important error messages in
a combination of 'erc-error-face' and 'erc-notice-face'. This is
merely a consequence of 'erc-display-message' getting smarter about
how it treats face properties when its 'type' parameter is a list that
starts with t. Originally, ERC's authors intended to display both
server-originating and ERC-generated errors in this style, but that
intent was never realized. Though now possible, the effect has been
limited to special errors involving usage and internal state. For
third-party code, the key takeaway is that more 'font-lock-face'
properties encountered in the wild may be combinations of faces rather
than lone ones.
*** 'erc-flood-protect' no longer influences input splitting.
This variable's role has been narrowed to rate limiting only. ERC
used to suppress protocol line-splitting when its value was nil, but
that's now handled by setting 'erc-split-line-length' to zero.
*** 'erc-pre-send-functions' visits prompt input post-split.
ERC now adjusts input lines to fall within allowed length limits
before showing hook members the result. For compatibility,
third-party code can request that the final input be adjusted again
prior to being sent. To facilitate this, the 'erc-input' object
shared among hook members has gained a 'refoldp' slot. See doc string
for details.
*** More flexibility in sending and displaying prompt input.
The abnormal hook 'erc-pre-send-functions' previously married outgoing
message text to its inserted representation in an ERC target buffer.
Going forward, users can populate the new slot 'substxt' with
alternate text to insert in place of the 'string' slot's contents,
which ERC still sends to the server. This dichotomy lets users
completely avoid the often fiddly 'erc-send-modify-hook' and friends
for use cases like language translation and subprotocol encoding.
*** ERC's prompt survives the insertion of user input and messages.
Previously, ERC's prompt and its input marker disappeared while
running hooks during message insertion, and the position of its
"insert marker" (ERC's per-buffer process mark) was inconsistent
during these spells. To make insertion handling more predictable in
preparation for incorporating various protocol extensions, the prompt
and its bounding markers have become perennial fixtures.
To effect this change, small behavioral differences in message
insertion have been adopted. Crucially, 'erc-insert-marker' now has
an "insertion type" of t, and 'erc-display-line-1' now calls 'insert'
instead of 'insert-before-markers. This allows user code running on
'erc-insert-modify-hook' and 'erc-insert-post-hook' to leave its own
markers at the actual insertion point instead of resorting to
workarounds. Message insertion for outgoing messages, in
'erc-display-msg', remains as before. In rare cases, these changes
may mean third-party code needs tweaking, for example, requiring the
use of 'insert-before-markers' instead of 'insert'. As always, users
feeling unduly inconvenienced by these changes are encouraged to voice
their concerns on the bug list.
*** Introducing new ways to detect ERC buffer types.
The old standby 'erc-default-target' has served ERC well for over two
decades. But a lesser known gotcha affecting its use has always
haunted an unlucky few, that is, the function has always returned
non-nil in "unjoined" channel buffers (those that the client has
parted with or been kicked from). While perhaps not itself a major
footgun, recessive pitfalls rooted in this subtlety continue to affect
dependent functions, like 'erc-get-buffer'.
To discourage misuse of 'erc-default-target', ERC 5.6 offers an
alternative in the function 'erc-target', which is identical to the
former except for its disregard for "joinedness." As a related bonus,
the dependent function 'erc-server-buffer-p' is being rebranded as
'erc-server-or-unjoined-channel-buffer-p'. Unfortunately, this
release lacks a similar solution for detecting "joinedness" directly,
but users can turn to 'xor'-ing 'erc-default-target' and 'erc-target'
as a makeshift kludge.
*** Function 'erc-kill-channel' renamed to 'erc-part-channel-on-kill'.
This function, which normally emits a 'PART' when ERC kills a channel
buffer, has been renamed for clarity. Moreover, this and all other
members of 'erc-kill-channel-hook' can now take comfort in knowing
that the killing of buffers done on behalf of the option
'erc-kill-buffer-on-part' has been made more detectable by the flag
'erc-killing-buffer-on-part-p'.
*** Stricter and more predictable channel-mode handling.
ERC has always processed channel modes using "standardized" letters
and popular status prefixes. Starting with this release, ERC will
begin preferring advertised "CHANMODES" when interpreting letters and
their arguments. To facilitate this transition, the functions
'erc-set-modes', 'erc-parse-modes', and 'erc-update-modes', have all
been provisionally deprecated. Expect a new, replacement API for
handling specific "MODE" types and letters in coming releases. If
you'd like a say in shaping how this transpires, please share your
ideas and use cases on the tracker.
*** A better way to define message-formatting templates.
The functions 'erc-define-catalog-entry' and 'erc-define-catalog' have
been deprecated in favor of 'erc-define-message-format-catalog', a new
macro for defining template "catalogs" at the top level of libraries.
*** Interface for determining display names renamed.
The option 'erc-format-nick-function' has been renamed to
'erc-speaker-from-channel-member-function' to better reflect its
actual role. So too has the related function 'erc-format-nick', which
is now 'erc-determine-speaker-from user'.
*** All default response handlers return nil.
Actually, this isn't yet true, but ERC is moving in this direction.
The goal is to guarantee that trailing members of response hooks, like
'erc-server-005-functions', have an opportunity to run after the
default handler. For now, certain default handlers that may have
previously returned non-nil, like 'erc-server-PONG' and
'erc-server-904', have been updated to return nil in all cases.
*** A template-based approach to formatting inserted chat messages.
Predicting and influencing how ERC formats messages containing a
leading "<speaker>" has never been straightforward. The characters
bracketing the speaker and the faces used for each component have
always been hard-coded, with 'erc-format-query-as-channel-p' being the
only knob of any consequence. With this release, ERC begins its
transition to a unified formatting paradigm that builds upon the
already familiar "language catalog" templating system. Using a
separate "speaker catalog" keyed by contextual symbols, like
'query-privmsg', ERC (and eventually everyone) will more easily be
able to influence how inserted messages take shape in buffers.
As a consequence of this transition, the default client no longer
calls `erc-format-privmessage' to format speaker messages. See that
function's doc string for help adapting to the new system, but please
keep in mind that discussions are still ongoing regarding its eventual
public interface. As usual, anyone interested should get involved by
writing to the mailing list.
*** New format templates for inserted CTCP ACTION messages.
In 5.5 and earlier, ERC displayed outgoing CTCP ACTION messages in
'erc-input-face' alone (before buttonizing). Incoming ACTION messages
mirrored this, except with 'erc-action-face' throughout. Going
forward, inserted outgoing "/ME" messages will also incorporate
'erc-action-face', only underneath 'erc-input-face', with
'erc-my-nick-face' sitting atop both in the leading "speaker" nickname
portion (again, pre-buttonizing). This new behavior sidesteps the
traditional format template 'erc-message-english-ACTION' from the
default "language catalog" in favor of an entry from the new internal
"speaker catalog". Users needing to access the old behavior can do so
by toggling a provided compatibility switch. See source code around
the function 'erc-send-action' for details.
*** Miscellaneous changes.
In 'erc-button-alist', 'Info-goto-node' has been supplanted by plain
old 'info', and the "<URL:...>" entry has been removed because it was
more or less redundant. In all ERC buffers, the "<TAB>" key is now
bound to a new command, 'erc-tab', that calls 'completion-at-point'
inside the input area and otherwise dispatches module-specific
commands, like 'erc-button-next'.
* Changes in ERC 5.5
** Smarter buffer naming for withstanding collisions.
ERC buffers now remain tied to their logical network contexts, even
while offline. These associations can survive regional server changes
and the intercession of proxies. As has long been practiced in other
areas of Emacs, "uniquified" buffer renaming prevents collisions
between buffers of different contexts. ERC's approach prioritizes
predictability over economy, favoring fully qualified suffixes without
elided or omitted components. Potential avenues for confusion remain
but will die out with the adoption of emerging protocol extensions.
** Option 'erc-rename-buffers' deprecated.
The promises made by its old "on" state are now fully realized and
enabled permanently by default. Its old behavior when disabled has
been preserved and will remain available (with warnings) for years to
come.
** Option 'erc-reuse-buffers' deprecated.
This ancient option has been a constant source of confusion, as
exhibited most recently when its "disabled" meaning was partially
inverted. Introduced in ERC 5.4 (Emacs 28.1), this regression saw
existing channel buffers transparently reassociated instead of created
anew. The pre-5.4 "disabled" behavior has been restored and will
remain accessible for the foreseeable future, warts and all (e.g.,
with its often superfluous "/DIALED-HOST" suffixing always present).
** The 'networks' module is now quasi-required.
The 'networks' module is now all but required for everyday interactive
use. A default member of 'erc-modules' since ERC 5.3, 'networks' has
grown increasingly integral to core client operations over the years.
From now on, only the most essential operations will be officially
supported in its absence, and users will see a warning upon invoking
an entry point, like 'erc-tls', when that's the case.
On a related note, the function 'erc-network' now always returns
non-nil in buffers created by a successfully established IRC
connection, even after that connection has been closed. This was done
to aid the overall effort to improve buffer association.
** Tighter auth-source integration.
The days of hit-and-miss auth-source queries are hopefully behind us.
With the overhaul of the services module temporarily shelved and the
transition to SASL-based authentication still underway, users may feel
left in the lurch to endure yet another release cycle of backtick
hell. For some, auth-source may provide a workaround in the form of
nonstandard server passwords. See the section entitled "auth-source"
in the Integrations chapter of ERC's manual.
** Rudimentary SASL support has arrived.
A new module, 'erc-sasl', now ships with ERC. See Info node "(erc)
SASL" in the manual for details.
** Username argument for entry-point commands.
Commands 'erc' and 'erc-tls' now accept a ':user' keyword argument,
which, when present, becomes the first argument passed to the "USER"
IRC command. The traditional way of setting this globally, via
'erc-email-userid', is still honored.
** Changes to display options for new ERC buffers.
The default value for the option 'erc-join-buffer', which determines
how new buffers are displayed, has been changed to 'bury' for security
reasons. Although the old value of 'buffer' is still accessible,
along with its original behavior, users wanting a safer alternative
can now opt for an improved 'window-noselect' instead. It still
offers the same pronounced visual cue when connecting and joining but
now avoids any hijacking of the active window as well.
Beyond this, additional flexibility is now available for controlling
the behavior of newly created target buffers during reconnection.
See the option 'erc-reconnect-display' for more.
** Improved handling of multiline prompt input.
This means better detection and handling of intervening and trailing
blanks when 'erc-send-whitespace-lines' is active. New options have
also been added for warning when input spans multiple lines. Although
off by default, new users are encouraged to enable them. See options
'erc-inhibit-multiline-input' and 'erc-ask-about-multiline-input'.
** URL handling has improved.
Clicking on 'irc://' and 'ircs://' links elsewhere in Emacs now does
the right thing most of the time. However, for security reasons,
users are now prompted to confirm connection parameters prior to lift
off. See the new '(erc) Integrations' section in the Info manual for
details.
** ERC's major-mode hook now runs slightly later.
The function 'erc-open' now delays running 'erc-mode-hook' until ERC's
prompt and its bounding markers and many essential local variables
have been initialized. Those essentials include the familiar
'erc-default-recipients', 'erc-server-users', and 'erc-network', as
well as the various "session" variables, like 'erc-session-connector'.
ERC activates "local modules" immediately afterward, just before
running 'erc-connect-pre-hook', which is still useful for gaining a
full accounting of what's been set.
In similar news, 'erc-open' no longer calls 'erc-update-modules'.
However, it still activates modules in a similar fashion, meaning,
among other things, global-module setup still occurs before major-mode
activation (something that's here to stay for compatibility reasons).
** Miscellaneous behavioral changes impacting the user experience.
A bug has been fixed that saw prompts being mangled, doubled, or
erased in server buffers upon disconnection. Instead, input prompts
now collapse into an alternate form designated by the option
'erc-prompt-hidden'. Behavior differs for query and channel buffers
but can be fine-tuned via the repurposed, formerly abandoned option
'erc-hide-prompt'.
Another fix-turned-feature involves certain commands provided by the
'erc-match' module, such as 'erc-add-keyword', 'erc-add-pal', and
others, which now optionally offer to 'regexp-quote' the current
input. The old behavior, if desired, can still be had via the new
option 'erc-match-quote-when-adding'.
In 5.4, support for using network symbols as keys was added for
'erc-autojoin-channels-alist'. This has been extended to include
explicit symbols passed to 'erc-tls' and 'erc' as so-called
network-context identifiers via a new ':id' keyword. The latter
carries wider significance beyond autojoin and can be used for
unequivocally identifying a connection in a human-readable way.
A number of UX-centric bug fixes accompany this release. For example,
spaces are now possible in server passwords, and users of the Soju
bouncer should no longer see outgoing messages pile up during periods
of heavy traffic. See the Emacs change log for the full complement.
** Miscellaneous behavioral changes in the library API.
A number of core macros and other definitions have been moved to a new
file called erc-common.el. This was done to help mitigate various
complications arising from the mutual dependency between 'erc' and
'erc-backend'.
Also on the maintainability front, ERC now relies on the Compat
library from GNU ELPA to supply forward compatibility shims for users
running older versions of Emacs. The required Compat version resides
atop ERC's main library file, in the 'Package-Requires' header.
Third-party modules should benefit automatically from its adoption.
In an effort to help further tame ERC's complexity, the variable
'erc-default-recipients' is now expected to hold but a single target.
As a consequence, functions like 'erc-add-default-channel' that
imagine an alternate, aspirational model of buffer-target relations
have been deprecated. For specifics, see entries in Emacs'
ChangeLog.4 from around June 30, 2022.
A number of less consequential deprecations also debut in this
release. For example, the function 'erc-auto-query' was deemed too
difficult to understand, behavior wise, and has thus been stricken
from the client code path with no public replacement. Although likely
uncontroversial, such changes may still spell disruption for some. If
you find yourself among them and in need of explanations, please see
related entries in the change log and discussions on the bug tracker.
Although this release is light on API features, some groundwork has
been laid for what may become a new breed of ERC module, namely,
"connection-local" (or simply "local") modules. This marks a small
but crucial step forward toward a more flexible and granular revamping
of ERC's long touted extensibility. See the Info node "(erc) Local
Modules" for details.
Lastly, a few internal variables have been introduced that could just
as well have been made public, possibly as user options. Likewise for
some internal functions. As always, users needing such functionality
officially exposed are encouraged to write to emacs-erc@gnu.org.
* Changes in ERC 5.4.1
** No user-visible changes since ERC 5.4, but a few tweaks in some ERC
file headers and the ERC manual in order to successfully build ERC for
GNU ELPA. (See below for the news item of ERC now being distributed
on GNU ELPA in addition to its continued inclusion in GNU Emacs core.)
* Changes in ERC 5.4
** Starting with Emacs 28.1 and ERC 5.4, ERC NEWS are added here again.
After ERC 5.3, since November 2012, ERC's NEWS items were added in the
main Emacs NEWS file, and users were referred to there. Now, starting
with Emacs 28.1 and ERC 5.4, which mark ERC's release to GNU ELPA, ERC
NEWS have been moved to this file again, so that we can include a NEWS
file consisting only of ERC changes in ERC's package on GNU ELPA.
The NEWS entries for ERC changes in Emacs 28.1 have been moved from
the main Emacs NEWS file to here. For ERC NEWS entries corresponding
to Emacs versions before 28, to avoid modifying the NEWS file for all
of those releases, the ERC NEWS entries have only been copied below,
and the NEWS.* files were left intact.
** ERC is now available on GNU ELPA.
Starting with ERC 5.4, in addition to being distributed with GNU Emacs
itself, ERC is also included in GNU ELPA, allowing users to enjoy the
improvements of newer ERC versions on older Emacs versions as well.
ERC's package page on GNU ELPA: https://elpa.gnu.org/packages/erc.html
** New option 'erc-rename-buffers'.
** New faces 'erc-my-nick-prefix-face' and 'erc-nick-prefix-face'.
** 'erc-format-@nick' displays all user modes instead of only op and voice.
** The display of irc commands in the current buffer has been disabled.
** 'erc-version' now follows the Emacs version.
** ERC can now hide message types by network or channel.
'erc-hide-list' will hide all messages of the specified type, while
'erc-network-hide-list' and 'erc-channel-hide-list' will only hide the
specified message types for the respective specified targets.
** Reconnection is now asynchronous.
** Nick completion is now case-insensitive again after inadvertently
being made case-sensitive in Emacs 24.2.
** New variable 'erc-default-port-tls' used to connect to TLS IRC
servers.
** New hook 'erc-insert-done-hook'.
This hook is called after strings have been inserted into the buffer,
and is free to alter point and window configurations, as it's not
called from inside a 'save-excursion', as opposed to 'erc-insert-post-hook'.
** 'erc-button-google-url' has been renamed to 'erc-button-search-url'
and its value has been changed to Duck Duck Go.
** 'erc-send-pre-hook' and 'erc-send-this' have been obsoleted.
The user option to use instead to alter text to be sent is now
'erc-pre-send-functions'.
** Improve matching/highlighting of nicknames.
Open and close parenthesis and apostrophe are not considered valid
nick characters anymore, matching the given grammar in RFC 2812