One way to add functionality to ERC is to customize which of its many modules are loaded.
There is a spiffy customize interface, which may be reached by typing
M-x customize-option RET erc-modules RET.
When removing a module outside of the Custom ecosystem, you may wish
to ensure it’s disabled by invoking its associated minor-mode toggle
with a nonpositive prefix argument, for example, C-u - M-x
erc-spelling-mode RET. Additionally, if you plan on loading
third-party modules that perform atypical setup on activation, you may
need to arrange for calling erc-update-modules
in your init
file. Examples of such setup might include registering an
erc-before-connect
hook, advising erc-open
, and
modifying erc-modules
itself.
The following is a list of available modules.
autoaway
¶Set away status automatically
autojoin
¶Join channels automatically
bbdb
¶Integrate with the Big Brother Database
button
¶Buttonize URLs, nicknames, and other text
capab-identify
¶Mark unidentified users on freenode and other servers supporting CAPAB.
completion (aka pcomplete)
¶Complete nicknames and commands (programmable)
fill
¶Wrap long lines
identd
¶Launch an identd server on port 8113
irccontrols
¶Highlight or remove IRC control characters
log
¶Save buffers in logs
match
¶Highlight pals, fools, and other keywords
menu
¶Display a menu in ERC buffers
netsplit
¶Detect netsplits
noncommands
¶Don’t display non-IRC commands after evaluation
notify
¶Notify when the online status of certain users changes
notifications
¶Send you a notification when you get a private message, or your nickname is mentioned
page
¶Process CTCP PAGE requests from IRC
readonly
¶Make displayed lines read-only
replace
¶Replace text in messages
ring
¶Enable an input history
sasl
¶Enable SASL authentication
scrolltobottom
¶Scroll to the bottom of the buffer
services
¶Identify to Nickserv (IRC Services) automatically
smiley
¶Convert smileys to pretty icons
sound
¶Play sounds when you receive CTCP SOUND requests
spelling
¶Check spelling of messages
stamp
¶Add timestamps to messages
track
¶Track channel activity in the mode-line
truncate
¶Truncate buffers to a certain size
unmorse
¶Translate morse code in messages
Note that some modules are essential to core IRC operations and thus
not listed above. You can nevertheless still remove these, but doing
so demands special precautions to avoid degrading the user experience.
At present, the only such module is networks
, whose library ERC
always loads anyway.
All modules operate as minor modes under the hood, and some newer ones may be defined as buffer-local. These so-called “local modules” are a work in progress and their behavior and interface are subject to change. As of ERC 5.5, the only practical differences are as follows:
erc-sasl-mode
, retain their values
across IRC sessions and override erc-module
membership when
influencing module activation.
erc-modules
via Customize not only
disables its mode but also kills its control variable in all ERC
buffers.
erc-sasl-mode
and the complementary
erc-sasl-enable
/erc-sasl-disable
pairing, behave
differently than their global counterparts.
In target buffers, a local module’s activation state survives
“reassociation” by default, but modules themselves always have the
final say. For example, a module may reset all instances of itself in
its network context upon reconnecting. Moreover, the value of a mode
variable may be meaningless in buffers that its module has no interest
in. For example, the value of erc-sasl-mode
doesn’t matter in
target buffers and may even remain non-nil
after SASL has been
disabled for the current connection (and vice versa).
When it comes to server buffers, a module’s activation state only
persists for sessions revived via the automatic reconnection mechanism
or a manual ‘/reconnect’ issued at the prompt. In other words,
this doesn’t apply to sessions revived by an entry-point command, such
as erc-tls
, because such commands always ensure a clean slate
by looking only to erc-modules
. Although a session revived in
this manner may indeed harvest other information from a previous
server buffer, it simply doesn’t care which modules might have been
active during that connection.
Lastly, a local mode’s toggle command, like erc-sasl-mode
, only
affects the current buffer, but its “non-mode” cousins, like
erc-sasl-enable
and erc-sasl-disable
, operate on all
buffers belonging to their connection (when called interactively).
And unlike global toggles, none of these ever mutates
erc-modules
.