* doc/misc/erc.texi: Minor tweak in SASL section.
* etc/ERC-NEWS: Revise various sections under 5.6.
* lisp/erc/erc-button.el (erc-button-alist): Remove comment.
(erc-nick-popup-alist): Remove comment.
* lisp/erc/erc-fill.el (erc-fill-wrap-margin-width): Remove comment.
(erc-fill-wrap-margin-side): Remove comment.
(erc-fill-line-spacing): Remove comment.
(erc-fill-wrap-use-pixels): Remove comment.
(erc-fill-wrap-visual-keys): Remove comment.
(erc-fill-wrap-force-screen-line-movement): Remove comment.
(erc-fill-wrap-merge): Remove comment.
* lisp/erc/erc-goodies.el (erc-scrolltobottom-all): Remove comment.
(erc-keep-place-indicator-style): Remove comment.
(erc-keep-place-indicator-buffer-type): Remove comment.
(erc-keep-place-indicator-follow): Remove comment.
* lisp/erc/erc-networks.el (erc-server-alist): Remove comment.
* lisp/erc/erc-nicks.el (erc-nicks): Remove comment.
* lisp/erc/erc-speedbar.el
(erc-speedbar-nicknames-window-width): Remove comment.
(erc-speedbar-hide-mode-topic): Remove comment.
(erc-speedbar-my-nick-face): Remove comment.
* lisp/erc/erc-stamp.el (erc-timestamp-format-right): Remove comment.
(erc-echo-timestamp-zone): Remove comment.
(erc-timestamp-use-align-to): Remove comment.
* lisp/erc/erc-status-sidebar.el
(erc-status-sidebar-highlight-active-buffer): Remove comment.
(erc-status-sidebar-style): Remove comment.
(erc-status-sidebar-click-display-action): Remove comment.
* lisp/erc/erc.el: Bump required Compat version to 29.1.4.3 in
Package-Requires header.
(erc-notice-face): Remove comment.
(erc-action-face): Remove comment.
(erc-interactive-display): Remove comment.
(erc-auto-reconnect-display-timeout): Remove comment.
(erc-reconnect-display-server-buffers): Remove comment.
(erc-modules): Remove comment.
* test/lisp/erc/resources/base/display-message/multibuf.eld: Remove
reference to specific ERC version in QUIT command reason.
* test/lisp/erc/resources/base/assoc/reconplay/foonet.eld: Timeout.
The value can be one of the following:
@table @asis
-@item @code{plain} and @code{scram} (``password-based'')
+@item @code{plain} or @code{scram} (``password-based'')
Here, ``password'' refers to your account password, which is usually
your @samp{NickServ} password. To make this work, customize
@code{erc-sasl-user} and @code{erc-sasl-password} or specify the
@code{:user} and @code{:password} keyword arguments when invoking
@code{erc-tls}.
-@item @code{external} (via Client TLS Certificate)
+@item @code{external} (via client @acronym{TLS} certificate)
This works in conjunction with the @code{:client-certificate} keyword
offered by @code{erc-tls}. Just ensure you've registered your
fingerprint with the network beforehand. The fingerprint is usually a
side window. Hit '<RET>' over a nick to spawn a "/QUERY" or a
"Lastlog" (Occur) session. See 'erc-nickbar-mode' for more.
-** The option 'erc-timestamp-use-align-to' is more versatile.
+** Option 'erc-timestamp-use-align-to' 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
** 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. With the existing design, merely loading the
+continued integration. Under the original design, merely loading the
library 'erc-log' caused 'truncate' to start writing logs, possibly
against a user's wishes.
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' 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).
+'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.
release cycle, so their removal hopefully won't cause much churn.
*** Some ERC-applied text properties have changed.
-Chiefly, 'rear-sticky' has been replaced by 'erc-command', which
-records the IRC command (or numeric) associated with a message. Less
-impactfully, 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.
+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.
*** Members of insert- and send-related hooks have been reordered.
-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 similar predictability among
-essential members of important hooks.
+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
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 saga comes with this release, in which a
-healthy bit of "pre-insertion" business has taken up residence in
-'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 is in place to ensure baseline
-functionality. As always, if you find these developments disturbing,
-please say so on the tracker.
+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
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 also extends to all
+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 those
-folded onto the next line. Such inconsistency made stamp detection
-overly complex and produced uneven results when toggling stamp
-visibility.
+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.
-*** Date stamps are independent messages.
+*** Date stamps have become independent messages.
ERC now inserts "date stamps" generated from the option
-'erc-timestamp-format-left' as separate, standalone messages. (This
-only matters if 'erc-insert-timestamp-function' is set to its default
-value of 'erc-insert-timestamp-left-and-right'.) ERC's near-term UI
-goals require exposing these stamps to existing code designed to
+'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. It may also be
-worth noting that as consequence of these changes, the internally
-managed variable 'erc-timestamp-last-inserted-left' no longer records
-the final trailing newline in 'erc-timestamp-format-left'. If you
-must, see variable 'erc-stamp-prepend-date-stamps-p' for a temporary
-escape hatch.
+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. They may also expect members of 'erc-insert-pre-hook' and
+'erc-insert-done-hook' to run unconditionally, even though ERC
+suppresses those hooks when inserting date stamps. Third parties may
+also not appreciate that 'erc-timestamp-last-inserted-left' no longer
+records the final trailing newline in '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.
*** The role of a module's Custom group is now more clearly defined.
-Associating built-in modules with Custom groups and provided library
+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
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.
+subcommand by telling ERC to defer to a specialized handler. This
+facility can be opened up to third parties should any one request it.
*** Longtime quasi modules made proper.
The 'fill' module is now defined by 'define-erc-module'. The same
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. See doc string for details.
+prior to being sent. To facilitate this, the 'erc-input' object
+shared among hook members has gained a new 'refoldp' slot, making this
+a breaking change, if only in theory. See doc string for details.
*** ERC's prompt survives the insertion of user input and messages.
Previously, ERC's prompt and its input marker disappeared while
PAR is a number of a regexp grouping whose text will be passed to
CALLBACK. There can be several PAR arguments."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(repeat
(list :tag "Button"
(choice :tag "Matches"
(format
\"ldapsearch -x -P 2 -h db.debian.org -b dc=debian,dc=org ircnick=%s\"
nick)))"
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(repeat (cons (string :tag "Op")
(choice function sexp))))
\"resolves\" to `left', ERC uses the width of the prompt if it's
wider on MOTD's end, which really only matters when `erc-prompt'
is a function."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(choice (const nil) integer))
(defcustom erc-fill-wrap-margin-side nil
A value of nil means ERC should decide based on the value of
`erc-insert-timestamp-function', which does not work for
user-defined functions."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(choice (const nil) (const left) (const right)))
(defcustom erc-fill-line-spacing nil
"Extra space between messages on graphical displays.
Its value should be larger than that of the variable
`line-spacing', if set. When unsure, start with 0.5."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(choice (const nil) number))
(defvar-local erc-fill--function nil
A value of nil means ERC should use columns, which may happen
regardless, depending on the Emacs version. This option only
matters when `erc-fill-wrap-mode' is enabled."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type 'boolean)
(defcustom erc-fill-wrap-visual-keys 'non-input
value is nil in the input area and t elsewhere. See related
option `erc-fill-wrap-force-screen-line-movement' for behavior
involving `next-line' and `previous-line'."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(choice (const nil) (const t) (const non-input)))
(defcustom erc-fill-wrap-force-screen-line-movement '(non-input)
would normally do otherwise. For example, setting this to
\\='(nil non-input) disables logical-line movement regardless of
the value of `erc-fill-wrap-visual-keys'."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(set (const nil) (const non-input)))
(defcustom erc-fill-wrap-merge t
"Whether to consolidate messages from the same speaker.
This tells ERC to omit redundant speaker labels for subsequent
messages less than a day apart."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type 'boolean)
(defun erc-fill--wrap-move (normal-cmd visual-cmd &rest args)
Note that users should consider this option's non-nil behavior to
be experimental. It currently only works with Emacs 28+."
:group 'erc-display
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(choice boolean (const relaxed)))
;;;###autoload(autoload 'erc-scrolltobottom-mode "erc-goodies" nil t)
`face', ERC adds the face `erc-keep-place-indicator-line' to the
appropriate line. A value of t does both."
:group 'erc
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(choice (const :tag "Use arrow" arrow)
(const :tag "Use face" face)
(const :tag "Use both arrow and face" t)))
"ERC buffer type in which to display `keep-place-indicator'.
A value of t means \"all\" ERC buffers."
:group 'erc
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(choice (const t) (const server) (const target)))
(defcustom erc-keep-place-indicator-follow nil
"Whether to sync visual kept place to window's top when reading.
For use with `erc-keep-place-indicator-mode'."
:group 'erc
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type 'boolean)
(defface erc-keep-place-indicator-line
this server corresponds,
HOST is the server's hostname, and (TLS-)PORTS is either a
number, a list of numbers, or a list of port ranges."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(alist :key-type (string :tag "Name")
:value-type
(group symbol (string :tag "Hostname")
(defgroup erc-nicks nil
"Colorize nicknames in ERC target buffers."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:group 'erc)
(defcustom erc-nicks-ignore-chars ",`'_-"
(defcustom erc-speedbar-nicknames-window-width 18
"Default width of the nicknames sidebar (in columns)."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type 'integer)
(defcustom erc-speedbar-sort-users-type 'activity
(defcustom erc-speedbar-hide-mode-topic 'headerline
"Hide mode and topic lines."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(choice (const :tag "Always show" nil)
(const :tag "Always hide" t)
(const :tag "Omit when headerline visible" headerline)))
When using the `nicks' module, you can see your nick as it
appears to others by coordinating with the option
`erc-nicks-skip-faces'."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(choice face (const :tag "Current nick or own speaker face" t)))
(defvar erc-speedbar-key-map nil
Unlike `erc-timestamp-format' and `erc-timestamp-format-left', if
the value of this option is nil, it falls back to using the value
of `erc-timestamp-format'."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(choice (const nil)
(string)))
(make-obsolete-variable 'erc-timestamp-format-right
the ZONE parameter of `format-time-string' for a description of
acceptable value types."
:type '(choice boolean number (const wall) (list number string))
- :package-version '(ERC . "5.6")) ; FIXME sync on release
+ :package-version '(ERC . "5.6"))
(defcustom erc-timestamp-intangible nil
"Whether the timestamps should be intangible, i.e. prevent the point
doesn't already start with one. And when its value is t, it adds
a single space, unconditionally."
:type '(choice boolean integer)
- :package-version '(ERC . "5.6")) ; FIXME sync on release
+ :package-version '(ERC . "5.6"))
(defvar-local erc-stamp--margin-width nil
"Width in columns of margin for `erc-stamp--display-margin-mode'.
"Whether to highlight the selected window's buffer in the sidebar.
ERC uses the same instance across all frames. May not be
compatible with all values of `erc-status-sidebar-style'."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type 'boolean)
(defcustom erc-status-sidebar-style 'all-queries-first
them here as customization choices, but you can still specify
them manually. See doc strings for a description of their
expected arguments and return values."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(choice (const channels-only)
(const all-mixed)
(const all-queries-first)
"How to display a buffer when clicked.
Values can be anything recognized by `display-buffer' for its
ACTION parameter."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type '(choice (const :tag "Always use/create other window" t)
(const :tag "Let `display-buffer' decide" nil)
(const :tag "Same window" (display-buffer-same-window
;; Michael Olson (mwolson@gnu.org)
;; Kelvin White (kwhite@gnu.org)
;; Version: 5.6-git
-;; Package-Requires: ((emacs "27.1") (compat "29.1.4.1"))
+;; Package-Requires: ((emacs "27.1") (compat "29.1.4.3"))
;; Keywords: IRC, chat, client, Internet
;; URL: https://www.gnu.org/software/emacs/erc.html
(((class color) (min-colors 88)) :foreground "SlateBlue")
(t :foreground "blue"))
"ERC face for notices."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:group 'erc-faces)
(defface erc-action-face '((((supports :weight semi-bold)) :weight semi-bold)
(t :weight bold))
"ERC face for actions generated by /ME."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:group 'erc-faces)
(defface erc-error-face '((t :foreground "red"))
issuance of a slash command, the clicking of a URL hyperlink, or
the invocation of an entry-point command. See Info node `(erc)
display-buffer' for more."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:group 'erc-buffers
:type erc--buffer-display-choices)
"Duration `erc-auto-reconnect-display' remains active.
The countdown starts on MOTD and is canceled early by any
\"slash\" command."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type 'integer
:group 'erc-buffers)
consider `erc-interactive-display' when users issue a /RECONNECT.
Enabling this tells ERC to always display server buffers
according to those options."
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:type 'boolean
:group 'erc-buffers)
(const :tag "unmorse: Translate morse code in messages" unmorse)
(const :tag "xdcc: Act as an XDCC file-server" xdcc)
(repeat :tag "Others" :inline t symbol))
- :package-version '(ERC . "5.6") ; FIXME sync on release
+ :package-version '(ERC . "5.6")
:group 'erc)
(defun erc-update-modules ()
;; -*- mode: lisp-data; -*-
-((pass 1 "PASS :changeme"))
+((pass 10 "PASS :changeme"))
((nick 1 "NICK tester"))
((user 1 "USER user 0 * :tester")
(0.0 ":irc.foonet.org 001 tester :Welcome to the foonet IRC Network tester")
(0.07 ":bob!~u@uee7kge7ua5sy.irc PRIVMSG #chan :Would all themselves laugh mortal.")
(0.04 ":dummy!~u@rdjcgiwfuwqmc.irc PRIVMSG tester :hi")
(0.06 ":bob!~u@uee7kge7ua5sy.irc PRIVMSG #chan :alice: It hath pleased the devil drunkenness to give place to the devil wrath; one unperfectness shows me another, to make me frankly despise myself.")
- (0.05 ":dummy!~u@rdjcgiwfuwqmc.irc QUIT :Quit: \2ERC\2 5.6-git (IRC client for GNU Emacs 30.0.50)")
+ (0.05 ":dummy!~u@rdjcgiwfuwqmc.irc QUIT :Quit: \2ERC\2 5.x (IRC client for GNU Emacs)")
(0.08 ":alice!~u@uee7kge7ua5sy.irc PRIVMSG #chan :You speak of him when he was less furnished than now he is with that which makes him both without and within."))
((quit 10 "QUIT :\2ERC\2")