[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Announcing ERC 5.5
Announcing ERC 5.5
Sat, 04 Mar 2023 06:48:14 -0800
Gnus/5.13 (Gnus v5.13)
This release comes with a host of bug fixes to core functionality, like
buffer naming, and to various library integrations. It also finally
delivers on the long-awaited promise of SASL support. Here's the full
rundown from etc/ERC-NEWS :
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
* 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
* 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
* 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
* 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
* 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
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
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
* 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
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. See Emacs change-log entries from
around July of 2022 for specifics.
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
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
Special thanks are owed to the following individuals (in no particular
order) for contributing to this release:
- The Emacs maintainers, obviously
- Amin, of course, for patiently enduring the neverending patch set
- Stefan Kangas for code review, doc fixes, and background maintenance
- Philip Kaludercic and Daniel Mendler for writing and maintaining
- Akib Azmain Turja for detailed help with the auth-source integration
- Mike Kazantsev for reporting and testing the many-faceted
- Christer Enfors for improving the docs
- Dick R. Chiang for untangling the mutual-dependency nightmare
- Libera user jrm for reporting the custom-options regression
- Mattias Engdegård for help with the DCC issue and various regexp
- Michael Albinus, Alex Schroeder, Michael Olson, Stefan Monnier, and
Damien Cassou for administrative advice and guidance
- Bug filers and discussion participants Fernando de Morais, Rostislav
Svoboda, Emanuel Berg, Corwin Brust, GNU Hacker, Guy Gastineau, Lin
Jian, Will Mengarini, Matheus Fillipe, Pankaj Jangid, Bob Proulx,
Tohiko Looka, Nacho Barrientos, TRS-80, and others
For anyone else thinking of getting involved, please step forward and
answer the call. We could definitely use a hand in any area, especially
- Bug fixes and code review
- Architecture and design
- Test coverage
- External support (Libera.Chat, Reddit, Stack Overflow, EmacsWiki)
Look forward to hearing from you, and please enjoy the release!
- Announcing ERC 5.5,