GNU bug report logs - #67767
30.0.50; ERC 5.6: Add track integration to the nicks module

Previous Next

Package: emacs;

Reported by: "J.P." <jp <at> neverwas.me>

Date: Mon, 11 Dec 2023 15:29:02 UTC

Severity: normal

Tags: patch

Found in version 30.0.50

Done: "J.P." <jp <at> neverwas.me>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 67767 in the body.
You can then email your comments to 67767 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to emacs-erc <at> gnu.org, bug-gnu-emacs <at> gnu.org:
bug#67767; Package emacs. (Mon, 11 Dec 2023 15:29:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to "J.P." <jp <at> neverwas.me>:
New bug report received and forwarded. Copy sent to emacs-erc <at> gnu.org, bug-gnu-emacs <at> gnu.org. (Mon, 11 Dec 2023 15:29:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: "J.P." <jp <at> neverwas.me>
To: bug-gnu-emacs <at> gnu.org
Subject: 30.0.50; ERC 5.6: Add track integration to the nicks module
Date: Mon, 11 Dec 2023 07:28:15 -0800
[Message part 1 (text/plain, inline)]
Tags: patch

ERC's `nicks' module doesn't currently play nice with `track'. Enabling
it breaks the cycling effect normally occurring among faces in
`erc-track-faces-normal-list' [1]. To address this, I'm proposing we
expose two internal seams:

  1. A function-valued variable for modifying or discarding faces
     gleaned in the narrowed buffer while `track' visits a message.

  2. A buffer-local hash table created on init from the contents of
     `erc-track-faces-normal-list'.

The first brings a small performance penalty and the second a small UX
hiccup [2]. The proposed implementation offsets the first by passing
around more refined data to cut down on some waste during processing.
The second is only currently addressed via doc string, although there's
a public compatibility flag to revert to a related historical behavior,
which dispenses with the issue indirectly.

The only actual addition to the `nicks' module is a user option named
`erc-nicks-track-faces'. It's a boolean that lets you opt out of seeing
nick colors as faces in the mode line indicator. There's also a loosely
related patch that adds some caching to the uniquified name shortening
performed by `track', although it should mainly benefit batch processing
and history playback. Suggestions welcome, as always.

Thanks.


[1] Although, what we typically perceive as this effect is somewhat
    illusory, if not underrealized. See comments preceding the new tests
    in the first patch.

[2] Users will have to toggle the module's minor-mode to update the
    variable mid-session, but we can provide a Custom :set function to
    help with this. Also, there's actually a resource penalty that comes
    with this change too. We can probably use per-server instead of
    per-channel hash tables, or only go per-channel if a local value for
    `erc-track-faces-normal-list' exists on `erc-track-mode' init.


In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.38, cairo version 1.17.6) of 2023-12-06 built on localhost
Repository revision: d8a00879309a3bf62f6ffcae103aa3bdba776ee9
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12014000
System Description: Fedora Linux 37 (Workstation Edition)

Configured using:
 'configure --enable-check-lisp-object-type --enable-checking=yes,glyphs
 'CFLAGS=-O0 -g3'
 PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG
JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES
NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3
THREADS TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB

Important settings:
  value of $LANG: en_US.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  minibuffer-regexp-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:
None found.

Features:
(shadow sort mail-extr emacsbug message mailcap yank-media puny dired
dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068 epg-config
gnus-util time-date mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils compile text-property-search comint
ansi-osc ansi-color ring comp-run comp-common rx erc auth-source cl-seq
eieio eieio-core cl-macs password-cache json subr-x map format-spec
cl-loaddefs cl-lib erc-backend erc-networks byte-opt gv bytecomp
byte-compile erc-common erc-compat erc-loaddefs rmc iso-transl tooltip
cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel term/x-win x-win term/common-win x-dnd touch-screen
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 dbusbind
inotify lcms2 dynamic-setting system-font-setting font-render-setting
cairo gtk x-toolkit xinput2 x multi-tty move-toolbar
make-network-process native-compile emacs)

Memory information:
((conses 16 82762 11177) (symbols 48 9671 0) (strings 32 25958 4639)
 (string-bytes 1 784755) (vectors 16 19276)
 (vector-slots 8 328221 11347) (floats 8 24 28) (intervals 56 260 0)
 (buffers 984 12))

[0001-5.6-Always-promote-normal-faces-in-erc-track.patch (text/x-patch, attachment)]
[0002-5.6-Cache-shortened-channel-names-in-erc-track.patch (text/x-patch, attachment)]
[0003-5.6-Add-erc-track-integration-to-erc-nicks.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67767; Package emacs. (Tue, 12 Dec 2023 02:19:01 GMT) Full text and rfc822 format available.

Message #8 received at 67767 <at> debbugs.gnu.org (full text, mbox):

From: "J.P." <jp <at> neverwas.me>
To: 67767 <at> debbugs.gnu.org
Cc: emacs-erc <at> gnu.org
Subject: Re: bug#67767: 30.0.50; ERC 5.6: Add track integration to the nicks
 module
Date: Mon, 11 Dec 2023 18:18:17 -0800
"J.P." <jp <at> neverwas.me> writes:

> [2] Users will have to toggle the module's minor-mode to update the
>     variable mid-session, but we can provide a Custom :set function to
>     help with this. Also, there's actually a resource penalty that comes
>     with this change too. We can probably use per-server instead of
>     per-channel hash tables, or only go per-channel if a local value for
>     `erc-track-faces-normal-list' exists on `erc-track-mode' init.

It turns out these changes may require more planning than originally
budgeted. There's a growing dependency on aspects of the `button' module
that haven't been fully sorted, along with a rather heightened potential
for leaking memory, so I'd rather not move too hastily without good
reason. As such, I'll likely be putting a hold on this until 5.7 and
retitling the bug accordingly.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67767; Package emacs. (Tue, 12 Dec 2023 14:50:02 GMT) Full text and rfc822 format available.

Message #11 received at 67767 <at> debbugs.gnu.org (full text, mbox):

From: "J.P." <jp <at> neverwas.me>
To: 67767 <at> debbugs.gnu.org
Cc: emacs-erc <at> gnu.org
Subject: Re: bug#67767: 30.0.50; ERC 5.6: Add track integration to the nicks
 module
Date: Tue, 12 Dec 2023 06:49:06 -0800
[Message part 1 (text/plain, inline)]
v2. Make "normal"-face hash table local to server buffers and double as
cache for inserted `nicks' faces. "Pre-combine" generated `nicks' faces
with `erc-nicks-backing-face' via :include. Overload
`erc-button-add-button' NICKP param (internally) for conveying current
`erc-button--nick' object. Remove `match'-based combo faces from
`erc-track-faces-priority-list' and `erc-track-faces-normal-list'.
Change default of `erc-button-nickname-face' to new face for
distinguishing between button-applied and "speaker" faces.

[0000-v1-v2.diff (text/x-patch, attachment)]
[0001-5.6-Have-nick-faces-inherit-from-erc-nicks-backing-f.patch (text/x-patch, attachment)]
[0002-5.7-Promote-normal-faces-in-erc-track.patch (text/x-patch, attachment)]
[0003-5.7-Cache-shortened-channel-names-in-erc-track.patch (text/x-patch, attachment)]
[0004-5.7-Add-erc-track-integration-to-erc-nicks.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67767; Package emacs. (Wed, 13 Dec 2023 14:07:01 GMT) Full text and rfc822 format available.

Message #14 received at 67767 <at> debbugs.gnu.org (full text, mbox):

From: "J.P." <jp <at> neverwas.me>
To: 67767 <at> debbugs.gnu.org
Cc: emacs-erc <at> gnu.org
Subject: Re: bug#67767: 30.0.50; ERC 5.6: Add track integration to the nicks
 module
Date: Wed, 13 Dec 2023 06:06:05 -0800
[Message part 1 (text/plain, inline)]
v3. Make default behavior of `erc-nicks-track-faces' more intuitive. Fix
issue with detection of obsolete button face in `track' options. Make
`erc-track--select-mode-line-face' more convenient to modify.

[0000-v2-v3.diff (text/x-patch, attachment)]
[0001-5.6-Include-rather-than-combine-erc-nicks-backing-fa.patch (text/x-patch, attachment)]
[0002-5.6-Fix-Custom-type-of-erc-track-faces-normal-list.patch (text/x-patch, attachment)]
[0003-5.7-Promote-normal-faces-in-erc-track.patch (text/x-patch, attachment)]
[0004-5.7-Cache-shortened-channel-names-in-erc-track.patch (text/x-patch, attachment)]
[0005-5.7-Add-erc-track-integration-to-erc-nicks.patch (text/x-patch, attachment)]

Reply sent to "J.P." <jp <at> neverwas.me>:
You have taken responsibility. (Mon, 18 Dec 2023 14:52:02 GMT) Full text and rfc822 format available.

Notification sent to "J.P." <jp <at> neverwas.me>:
bug acknowledged by developer. (Mon, 18 Dec 2023 14:52:02 GMT) Full text and rfc822 format available.

Message #19 received at 67767-done <at> debbugs.gnu.org (full text, mbox):

From: "J.P." <jp <at> neverwas.me>
To: 67767-done <at> debbugs.gnu.org
Cc: emacs-erc <at> gnu.org
Subject: Re: bug#67767: 30.0.50; ERC 5.6: Add track integration to the nicks
 module
Date: Mon, 18 Dec 2023 06:51:50 -0800
A version of this has been installed (perhaps prematurely) as

  8e06f224a9e * Add erc-track integration to erc-nicks

Also included are some superficial changes to a few essential variables
and data structures, such as `erc-channel-users'. See etc/ERC-NEWS for
details.

Closing for now.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Tue, 16 Jan 2024 12:24:07 GMT) Full text and rfc822 format available.

bug unarchived. Request was from "J.P." <jp <at> neverwas.me> to control <at> debbugs.gnu.org. (Sun, 29 Sep 2024 16:56:01 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67767; Package emacs. (Mon, 30 Sep 2024 00:36:02 GMT) Full text and rfc822 format available.

Message #26 received at 67767 <at> debbugs.gnu.org (full text, mbox):

From: "J.P." <jp <at> neverwas.me>
To: 67767 <at> debbugs.gnu.org
Cc: emacs-erc <at> gnu.org
Subject: Re: bug#67767: 30.0.50; ERC 5.6: Add track integration to the nicks
 module
Date: Sun, 29 Sep 2024 17:34:46 -0700
[Message part 1 (text/plain, inline)]
"J.P." <jp <at> neverwas.me> writes:

> ERC's `nicks' module doesn't currently play nice with `track'. Enabling
> it breaks the cycling effect normally occurring among faces in
> `erc-track-faces-normal-list' [1].
>
[...]
>
> [1] Although, what we typically perceive as this effect is somewhat
>     illusory, if not underrealized. See comments preceding the new tests
>     in the first patch.

It's been pointed out that the most recent attempt at improving the
situation, especially with regard to the option `erc-nicks-track-faces',
ended up perpetuating rather unintuitive aspects of the original
behavior in certain common situations. While the particulars are tedious
to lay out, a somewhat relatable example is a speaker with a
`nicks'-owned face speaking immediately after an inserted JOIN message
(displayed in `erc-notice-face'). Based on the doc string of
`erc-nicks-track-faces', you'd think the `track' segment would favor the
`nicks'-owned face, but that's not currently so. The attached patch aims
to rectify this as well as address other, similar surprises.

Another problem with the current "normals" behavior is that it fails to
adequately exhibit the "flickering" effect when `nicks' _isn't_ enabled.
You can see this by connecting using the default configuration. Notice
that the mode-line segment stays on `erc-default-face while users are
conversing so long as they don't mention one another. However, the
"normals" feature was always meant to provide more responsive feedback
to clearly indicate active conversations (including monologuing). The
patch tries to address this by adding the default buttonized speaker
face to the related options `erc-track-faces-priority-list' and
`erc-track-faces-normal-list'. If there's a smarter way, hopefully
someone will speak up.

Thanks.

[0001-5.6.1-Fix-prioritize-variant-of-erc-nicks-track-face.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67767; Package emacs. (Fri, 04 Oct 2024 08:32:02 GMT) Full text and rfc822 format available.

Message #29 received at 67767 <at> debbugs.gnu.org (full text, mbox):

From: "J.P." <jp <at> neverwas.me>
To: 67767 <at> debbugs.gnu.org
Cc: Trevor Arjeski <tmarjeski <at> gmail.com>, emacs-erc <at> gnu.org
Subject: Re: bug#67767: 30.0.50; ERC 5.6: Add track integration to the nicks
 module
Date: Fri, 04 Oct 2024 01:30:56 -0700
[Message part 1 (text/plain, inline)]
"J.P." <jp <at> neverwas.me> writes:

> It's been pointed out that the most recent attempt at improving the
> situation, especially with regard to the option `erc-nicks-track-faces',
> ended up perpetuating rather unintuitive aspects of the original
> behavior in certain common situations.
[...]
>
> Another problem with the current "normals" behavior is that it fails to
> adequately exhibit the "flickering" effect when `nicks' _isn't_ enabled.
> You can see this by connecting using the default configuration. Notice
> that the mode-line segment stays on `erc-default-face while users are
> conversing so long as they don't mention one another. However, the
> "normals" feature was always meant to provide more responsive feedback
> to clearly indicate active conversations (including monologuing). The
> patch tries to address this by adding the default buttonized speaker
> face to the related options `erc-track-faces-priority-list' and
> `erc-track-faces-normal-list'. If there's a smarter way, hopefully
> someone will speak up.

Attached is a v2 introducing a `t' choice for `erc-nicks-track-faces'.
It suppresses the "alternating" effect associated with the option
`erc-track-faces-normal-list'. See [1] for additional context.

This strays into new feature territory, which should be verboten for
patch releases. However, since closely related code exhibits bug-like
inconsistencies addressed by this patch, and such an addition might help
improve users' mental model in terms of predictability vis-a-vis the
current slate of related options, it seems a somewhat justifiable
inclusion (IMO). OTOH, we could just as well wait until 5.7.

[1] https://lists.gnu.org/archive/html/emacs-erc/2024-10/msg00006.html


[0000-v1-v2.diff (text/x-patch, attachment)]
[0001-5.6.1-Clarify-behavior-of-erc-nicks-track-faces-vari.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67767; Package emacs. (Sat, 05 Oct 2024 01:41:02 GMT) Full text and rfc822 format available.

Message #32 received at 67767 <at> debbugs.gnu.org (full text, mbox):

From: "J.P." <jp <at> neverwas.me>
To: 67767 <at> debbugs.gnu.org
Cc: emacs-erc <at> gnu.org
Subject: Re: bug#67767: 30.0.50; ERC 5.6: Add track integration to the nicks
 module
Date: Fri, 04 Oct 2024 18:40:25 -0700
"J.P." <jp <at> neverwas.me> writes:

> +(defun erc-nicks--track-always (current contender contenders ranks normals)
> +  "Return a viable `nicks' face, possibly CURRENT, among CONTENDERS.
> +See `erc-track--select-mode-line-face' for parameter types."
> +  (when-let
> +      ((spkr (erc-nicks--assess-track-faces current contender ranks normals)))
> +    (catch 'contender
> +      (dolist (candidate (cdr (reverse contenders)))
                             ~~~~~~~~~~~~~~~~~~~~~~~

That should be

         (dolist (candidate (reverse (cdr contenders)))

Also, `spkr' is unused.

> +        (when (erc-nicks--ours-p candidate)
> +          (cl-assert (gethash candidate normals))
>            (throw 'contender candidate))))))
>  
>  (defun erc-nicks--setup-track-integration ()




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#67767; Package emacs. (Tue, 15 Oct 2024 03:03:01 GMT) Full text and rfc822 format available.

Message #35 received at 67767 <at> debbugs.gnu.org (full text, mbox):

From: "J.P." <jp <at> neverwas.me>
To: 67767 <at> debbugs.gnu.org
Cc: emacs-erc <at> gnu.org
Subject: Re: bug#67767: 30.0.50; ERC 5.6: Add track integration to the nicks
 module
Date: Mon, 14 Oct 2024 20:02:13 -0700
"J.P." <jp <at> neverwas.me> writes:

> Attached is a v2 introducing a `t' choice for `erc-nicks-track-faces'.
> It suppresses the "alternating" effect associated with the option
> `erc-track-faces-normal-list'.

This was added recently as

  9906e34f973 Crystallize erc-nicks-track-faces behavior

The bug is already closed.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Tue, 12 Nov 2024 12:24:13 GMT) Full text and rfc822 format available.

This bug report was last modified 217 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.