Subject: bug#68601: 30.0.50; ERC 5.6-git: [patch] Add more erc-message-type options

From: Corwin Brust <[email-masked]>
Date: Fri, 19 Jan 2024 23:51:36 -0600

Tags: patch

Hi all,

IME, people have a hard time finding some of the more obscure message
type "codes" that we sometimes wish to hide (e.g.) using
`erc-hide-list' and friends.

Each message on IRC is sent along with a numeric code.  Users may wish
to hide some messages, for example those which are system generated
based on an action they have expressly taken.  ERC provides several
features for this, most notably the `erc-hide-list',
`erc-network-hide-list' and `erc-channel-hist-list' variables. These
variables use a widget, `erc-message-type', which defines a list of
common codes.  The patch at the bottom of the message adds several
options, each with a descriptive tag.   I selected the types to add
based on my experience helping people adjust their settings, for
example in conversation on IRC, as well as reviewing the IRC
documentation collection mentioned in the commit message.

I failed to find related tests to bring along, and have no immediate
thought to adding some.  Let me know if I should try to make a news
entry, and your thoughts, as always.  Thanks ever so much for your
work on ERC.

In GNU Emacs 30.0.50 (build 1, x86_64-w64-mingw32) of 2024-01-11 built
 on AVALON
Repository revision: dc1f18e9d0863a03e00134b36279101f0747fcfb
Repository branch: master
Windowing system distributor 'Microsoft Corp.', version 10.0.19045
System Description: Microsoft Windows 10 Home (v10.0.2009.19045.3992)

Configured using:
 'configure --with-modules --without-dbus --with-native-compilation
 --without-compress-install --with-tree-sitter CFLAGS=-O2'

Configured features:
ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NATIVE_COMP
NOTIFY W32NOTIFY PDUMPER PNG RSVG SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XPM ZLIB

Important settings:
  value of $LANG: ENU
  locale-coding-system: cp1252

Major mode: Diff

Minor modes in effect:
  whitespace-mode: t
  company-box-mode: t
  company-quickhelp-mode: t
  company-quickhelp-local-mode: t
  global-company-mode: t
  company-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  server-mode: t
  recentf-mode: t
  global-emojify-mode: t
  emojify-mode: t
  dired-async-mode: t
  async-bytecomp-package-mode: t
  which-key-mode: t
  erc-log-mode: t
  erc-hide-line-mode: t
  erc-spelling-mode: t
  erc-track-mode: t
  erc-track-minor-mode: t
  erc-ring-mode: t
  erc-netsplit-mode: t
  erc-menu-mode: t
  erc-list-mode: t
  erc-irccontrols-mode: t
  erc-move-to-prompt-mode: t
  erc-readonly-mode: t
  erc-scrolltobottom-mode: t
  erc-imenu-mode: t
  erc-pcomplete-mode: t
  erc-button-mode: t
  erc-fill-mode: t
  erc-stamp-mode: t
  erc-autojoin-mode: t
  erc-ercn-mode: t
  erc-match-mode: t
  erc-networks-mode: t
  projectile-mode: t
  lisp-extra-font-lock-global-mode: t
  windmove-mode: t
  winner-mode: t
  save-place-mode: t
  global-hl-todo-mode: t
  delete-selection-mode: t
  auto-compile-on-load-mode: t
  auto-compile-on-save-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-mode: t
  column-number-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
~/site_lisp/hideshowvis hides c:/emacs/sitelisp/hideshowvis
c:/emacs/sitelisp/all-the-icons hides
c:/Users/corwi/.emacs.d/elpa/all-the-icons-20210831.1317/all-the-icons
c:/Users/corwi/.emacs.d/elpa/transient-20230315.1520/transient hides
h:/install/emacs-30-dc1f18/share/emacs/30.0.50/lisp/transient
c:/Users/corwi/.emacs.d/elpa/ef-themes-1.3.0/theme-loaddefs hides
h:/install/emacs-30-dc1f18/share/emacs/30.0.50/lisp/theme-loaddefs
c:/Users/corwi/.emacs.d/elpa/bind-key-20210210.1609/bind-key hides
h:/install/emacs-30-dc1f18/share/emacs/30.0.50/lisp/bind-key
c:/emacs/sitelisp/erc-spelling hides
h:/install/emacs-30-dc1f18/share/emacs/30.0.50/lisp/erc/erc-spelling

Features:
(shadow sort mail-extr emacsbug whitespace magit-patch magit-subtree
magit-gitignore magit-ediff ediff ediff-merg ediff-mult ediff-wind
ediff-diff ediff-help ediff-init ediff-util magit-extras bug-reference
image-file image-converter erc-ibuffer erc-notify erc-page erc-services
erc-sound erc-speedbar speedbar ezimage dframe erc-truncate erc-xdcc
erc-dcc pulse mule-diag writegood-mode oc-basic ol-eww eww url-queue
mm-url ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect gnus-art mm-uu
mml2015 mm-view mml-smime smime dig gnus-sum shr pixel-fill kinsoku
url-file svg dom gnus-group gnus-undo gnus-start gnus-dbus dbus xml
gnus-cloud nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int
gnus-range gnus-win gnus nnheader range ol-docview doc-view jka-compr
image-mode exif ol-bibtex bibtex ol-bbdb ol-w3m ol-doi org-link-doi
finder-inf filecache company-box company-box-doc frame-local
company-box-icons init-company company-oddmuse company-keywords
company-etags company-gtags company-dabbrev-code company-dabbrev
company-files company-clang company-capf company-cmake company-semantic
company-template company-bbdb company-math math-symbol-lists
company-elisp company-emoji company-emoji-list company-quickhelp pos-tip
company etags fileloop xref project tmm js c-ts-common pcmpl-unix
cperl-mode facemenu cl-print debug backtrace face-remap magit-submodule
magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull
magit-fetch magit-clone magit-remote magit-commit magit-sequence
magit-notes magit-worktree magit-tag magit-merge magit-branch
magit-reset magit-files magit-refs magit-status magit magit-repos
magit-apply magit-wip magit-log which-func magit-diff smerge-mode diff
git-commit log-edit message sendmail yank-media rfc822 mml mml-sec epa
derived epg rfc6068 epg-config gnus-util mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr
mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log magit-core
magit-autorevert autorevert filenotify magit-margin magit-transient
magit-process with-editor server magit-mode transient magit-git
magit-base magit-section crm misearch multi-isearch shortdoc help-fns
radix-tree vc-hg vc-bzr tramp-cmds vc-git diff-mode vc-dispatcher
sh-script smie treesit executable markdown-mode mule-util recentf
tree-widget emojify apropos tar-mode arc-mode archive-mode ht
dired-async dired-aux dired dired-loaddefs async-bytecomp async delight
which-key gnutls network-stream puny nsm init-erc-30 erc-log
erc-hide-line erc-count-users-mode erc-spelling flyspell erc-nicks
erc-status-sidebar ercn erc-track erc-ring erc-netsplit erc-menu
erc-list erc-goodies erc-imenu imenu erc-pcomplete erc-button erc-fill
erc-stamp erc-join dash erc-match erc erc-backend erc-networks
erc-common erc-compat compat erc-loaddefs init init-customize init-theme
cyberpunk-theme powerline powerline-separators color powerline-themes
all-the-icons all-the-icons-faces data-material data-weathericons
data-octicons data-fileicons data-faicons data-alltheicons init-bindkey
init-fun display-line-numbers init-vc init-projectile tramp-cache
time-stamp tramp-sh tramp trampver tramp-integration files-x
tramp-message tramp-compat parse-time iso8601 tramp-loaddefs projectile
lisp-mnt grep ibuf-ext ibuffer ibuffer-loaddefs thingatpt init-elisp
lisp-extra-font-lock paredit init-org org-capture org-expiry ob-shell
ob-plantuml ob-perl ob-js ob-latex ob-dot ob-ditaa ob-C cc-mode cc-fonts
cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs
org-habit org-agenda-property org-agenda org-element org-persist xdg
org-id avl-tree generator org-refile org ob ob-tangle ob-ref ob-lob
ob-table ob-exp org-macro org-src ob-comint org-pcomplete org-list
org-footnote org-faces org-entities time-date noutline outline
org-version ob-emacs-lisp ob-core ob-eval org-cycle org-table ol
org-fold org-fold-core org-keys oc org-loaddefs find-func cal-menu
calendar cal-loaddefs org-compat org-macs format-spec init-perl
init-editor windmove winner ido ispell saveplace ws-butler edmacro
kmacro smart-hungry-delete powershell advice compile
text-property-search shell pcomplete comint ansi-osc ansi-color ring
hl-todo fullframe rainbow-delimiters delsel cus-edit pp cus-load
wid-edit init-package-managment diminish auto-compile comp comp-cstr
warnings icons comp-run comp-common packed cl-extra help-mode
use-package use-package-ensure use-package-delight use-package-diminish
use-package-bind-key bind-key easy-mmode use-package-core init-local cl
cybercafe-theme-autoloads cyberpunk-theme-autoloads delight-autoloads
ef-themes-autoloads elcord-autoloads elcouch-autoloads
emacs-gc-stats-autoloads ercn-autoloads helpful-autoloads
highlight-parentheses-autoloads html5-schema-autoloads
json-mode-autoloads rx json-snatcher-autoloads keycast-autoloads
libelcouch-autoloads mines-autoloads modus-themes-autoloads
multiple-cursors-autoloads navigel-autoloads
nerd-icons-completion-autoloads nerd-icons-dired-autoloads
nerd-icons-ibuffer-autoloads pacmacs-autoloads powerline-autoloads
psgml-autoloads rainbow-mode-autoloads request-autoloads subed-autoloads
svg-lib-autoloads taxy-magit-section-autoloads taxy-autoloads
magit-autoloads pcase magit-section-autoloads git-commit-autoloads
transient-autoloads treemacs-nerd-icons-autoloads nerd-icons-autoloads
dash-autoloads typescript-mode-autoloads valign-autoloads
vertico-posframe-autoloads vertico-autoloads with-editor-autoloads info
compat-autoloads zenburn-theme-autoloads package browse-url url
url-proxy url-privacy url-expand url-methods url-history url-cookie
generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x
map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc
iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel dos-w32 ls-lisp disp-table
term/w32-win w32-win w32-vars term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer nadvice seq simple cl-generic
indonesian philippine cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs
theme-loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads w32notify w32 lcms2 multi-tty
move-toolbar make-network-process native-compile emacs)

Memory information:
((conses 16 14753514 1930915) (symbols 48 56596 3)
 (strings 32 1310140 174326) (string-bytes 1 169120043)
 (vectors 16 271475) (vector-slots 8 8767179 772052)
 (floats 8 1772 20211) (intervals 56 548265 53490) (buffers 984 177))

>From 4ca17405f75d9e20d1b88086afa39be0128623fb Mon Sep 17 00:00:00 2001
From: Corwin Brust <[email-masked]>
Date: Fri, 19 Jan 2024 23:07:39 -0600
Subject: [PATCH] 2024-01-19  Corwin Brust  <[email-masked]>

* lisp/erc/erc.el (erc-message-type): add more of the possible
IRE message types to customize widget for `erc-*hide-list'.
New options have tags informed by these descriptions:
https://modern.ircdocs.horse/#numerics
---
 lisp/erc/erc.el | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index 767a693a52e..7957462a088 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -386,6 +386,16 @@ 'erc-message-type
           (const "PART")
           (const "QUIT")
           (const "MODE")
+          (const :tag "Away notices (RPL_AWAY 301)" "301")
+          (const :tag "Self back notice (REP_UNAWAY 305)" "305")
+          (const :tag "Self away notice (REP_NOWAWAY 306)" "306")
+          (const :tag "Channel modes on join (RPL_CHANNELMODEIS 324)" "324")
+          (const :tag "Channel creation time (RPL_CREATIONTIME 329)" "329")
+          (const :tag "Channel no-topic on join (RPL_NOTOPIC 331)" "331")
+          (const :tag "Channel topic on join (RPL_TOPIC 332)" "332")
+          (const :tag "Topic author and time on join
(RPL_TOPICWHOTIME 333)" "333")
+          (const :tag "Invitation success notice (RPL_INVITING 341)" "341")
+          (const :tag "Channel member names (353 RPL_NAMEREPLY)" "353")
           (repeat :inline t :tag "Others" (string :tag "IRC Message Type"))))

 (defcustom erc-hide-list nil
-- 
2.43.0.windows.1