GNU bug report logs - #69860
29.2; ERC 5.6-git: erc: Incorrect face formatting applied for fg=99 bg=x (irccontrols module with erc-interpret-mirc-color=t)

Previous Next

Package: emacs;

Reported by: Alcor <alcor <at> tilde.club>

Date: Sun, 17 Mar 2024 16:35:01 UTC

Severity: normal

Found in version 29.2

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 69860 in the body.
You can then email your comments to 69860 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#69860; Package emacs. (Sun, 17 Mar 2024 16:35:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Alcor <alcor <at> tilde.club>:
New bug report received and forwarded. Copy sent to emacs-erc <at> gnu.org, bug-gnu-emacs <at> gnu.org. (Sun, 17 Mar 2024 16:35:01 GMT) Full text and rfc822 format available.

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

From: Alcor <alcor <at> tilde.club>
To: bug-gnu-emacs <at> gnu.org
Subject: 29.2; ERC 5.6-git: erc: Incorrect face formatting applied for fg=99
 bg=x (irccontrols module with erc-interpret-mirc-color=t)
Date: Sun, 17 Mar 2024 17:31:44 +0100
[Message part 1 (text/plain, inline)]
On Emacs 29.2, using erc-5.6snapshot0.20240310.61129:

1. Enable the irccontrols module (for erc)
2. Enable `erc-interpret-mirc-color'
3. Login onto any IRC network, any channel, or perform a /query session
4. Either send, or have someone send you the string ^C99,4Text with a
red background^C (Key sequence: C-q C-c 99,4Text with a red background
C-q C-c)

According to https://modern.ircdocs.horse/formatting.html the text
*should* get formatted with a default foreground, and a red background. The
observed behavior - however - is that the text is formatted with multiple
background "bg" faces: (erc-control-default-bg bg:erc-color-face4
erc-input-face).

A screenshot illustrating the issue is attached to this message.


In GNU Emacs 29.2 (build 2, x86_64-pc-linux-gnu, GTK+ Version 3.24.20,
 cairo version 1.16.0) of 2024-03-13 built on lcy02-amd64-051
Repository revision: 900dc1b4bf3011e685a1ec7d7ce4dcd0262ec880
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12201001
System Description: Ubuntu 22.04.4 LTS

Configured using:
 'configure --prefix=/snap/emacs/current/usr --with-x-toolkit=gtk3
 --without-xaw3d --with-modules --with-cairo
 --with-native-compilation=aot --without-pgtk --with-xinput2
 --with-tree-sitter --with-json
 'CFLAGS=-isystem/build/emacs/parts/emacs/install/usr/include
 -isystem/build/emacs/parts/emacs/install/usr/include/x86_64-linux-gnu
 -isystem/build/emacs/stage/usr/include -O2'
 'CPPFLAGS=-isystem/build/emacs/parts/emacs/install/usr/include
 -isystem/build/emacs/parts/emacs/install/usr/include/x86_64-linux-gnu
 -isystem/build/emacs/stage/usr/include'
 'LDFLAGS=-L/build/emacs/parts/emacs/install/lib
 -L/build/emacs/parts/emacs/install/usr/lib
 -L/build/emacs/parts/emacs/install/lib/x86_64-linux-gnu
 -L/build/emacs/parts/emacs/install/usr/lib/x86_64-linux-gnu
 -L/build/emacs/stage/usr/lib''

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 TREE_SITTER X11 XDBE XIM XINPUT2 XPM
GTK3 ZLIB

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

Major mode: Group

Minor modes in effect:
  gnus-undo-mode: t
  shell-dirtrack-mode: t
  erc-ring-mode: t
  erc-notifications-mode: t
  erc-netsplit-mode: t
  erc-menu-mode: t
  erc-list-mode: t
  erc-irccontrols-mode: t
  erc-keep-place-mode: t
  erc-move-to-prompt-mode: t
  erc-readonly-mode: t
  erc-scrolltobottom-mode: t
  erc-imenu-mode: t
  erc-button-mode: t
  erc-fill-mode: t
  erc-stamp-mode: t
  erc-bufbar-mode: t
  erc-track-mode: t
  erc-match-mode: t
  erc-autojoin-mode: t
  erc-autoaway-mode: t
  recentf-mode: t
  pixel-scroll-precision-mode: t
  minibuffer-depth-indicate-mode: t
  global-whitespace-mode: t
  global-goto-address-mode: t
  goto-address-mode: t
  global-auto-revert-mode: t
  fido-vertical-mode: t
  icomplete-vertical-mode: t
  icomplete-mode: t
  fido-mode: t
  erc-networks-mode: t
  desktop-save-mode: t
  windmove-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
  buffer-read-only: 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

Features:
(shadow emacsbug mailalias smtpmail ispell cl-print help-fns radix-tree
sort smiley gnus-cite mail-extr textsec uni-scripts idna-mapping
ucs-normalize uni-confusable textsec-check gnus-bcklg gnus-async gnus-ml
nndraft nnmh nnfolder utf-7 rfc2104 network-stream nsm gnus-agent
gnus-srvr gnus-score score-mode nnvirtual gnus-msg nntp gnus-cache
display-line-numbers org-element org-persist org-id org-refile avl-tree
generator 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
gnutls dig gnus-sum shr pixel-fill kinsoku url-file svg dom gnus-group
gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7
nnoo gnus-spec gnus-int gnus-range message sendmail yank-media puny
rfc822 mml mml-sec epa epg rfc6068 epg-config mm-decode mm-bodies
mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev
gmm-utils mailheader gnus-win gnus nnheader gnus-util
text-property-search mail-utils range mm-util mail-prsvr ol-docview
doc-view jka-compr image-mode exif dired dired-loaddefs ol-bibtex bibtex
ol-bbdb ol-w3m ol-doi org-link-doi 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 noutline outline 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-version
org-compat org-macs tramp-cache time-stamp tramp-sh tramp tramp-loaddefs
trampver tramp-integration files-x tramp-compat shell parse-time iso8601
disp-table erc-ring erc-desktop-notifications notifications dbus xml
erc-nicks color erc-netsplit erc-menu erc-list erc-goodies erc-imenu
imenu erc-pcomplete time-date pcomplete comint ansi-osc ansi-color
erc-button erc-fill erc-stamp erc-status-sidebar erc-track erc-match
erc-join erc-autoaway leuven-dark-theme recentf tree-widget wid-edit
pixel-scroll cua-base ring mb-depth whitespace goto-addr thingatpt
autorevert filenotify icomplete erc derived format-spec erc-backend
erc-networks easy-mmode erc-common inline erc-compat pcase compat
erc-loaddefs desktop frameset cus-load windmove xdg site-start comp
comp-cstr warnings icons rx cl-extra help-mode erc-autoloads info
compat-autoloads markdown-mode-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 term/x-win x-win
term/common-win x-dnd 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 move-toolbar gtk x-toolkit xinput2 x multi-tty
make-network-process native-compile emacs)

Memory information:
((conses 16 615423 61113)
 (symbols 48 32158 26)
 (strings 32 117195 5131)
 (string-bytes 1 3518684)
 (vectors 16 71836)
 (vector-slots 8 1268576 98438)
 (floats 8 591 755)
 (intervals 56 1811 223)
 (buffers 984 22))

[c99x-describe-char.png (image/png, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#69860; Package emacs. (Sun, 17 Mar 2024 17:17:02 GMT) Full text and rfc822 format available.

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

From: "J.P." <jp <at> neverwas.me>
To: Alcor via General discussion about ERC <emacs-erc <at> gnu.org>
Cc: 69860 <at> debbugs.gnu.org, Alcor <alcor <at> tilde.club>
Subject: Re: bug#69860: 29.2; ERC 5.6-git: erc: Incorrect face formatting
 applied for fg=99 bg=x (irccontrols module with
 erc-interpret-mirc-color=t)
Date: Sun, 17 Mar 2024 10:16:16 -0700
Alcor via General discussion about ERC <emacs-erc <at> gnu.org> writes:

> On Emacs 29.2, using erc-5.6snapshot0.20240310.61129:
>
> 1. Enable the irccontrols module (for erc)
> 2. Enable `erc-interpret-mirc-color'
> 3. Login onto any IRC network, any channel, or perform a /query session
> 4. Either send, or have someone send you the string ^C99,4Text with a
> red background^C (Key sequence: C-q C-c 99,4Text with a red background
> C-q C-c)
>
> According to https://modern.ircdocs.horse/formatting.html the text
> *should* get formatted with a default foreground, and a red background. The
> observed behavior - however - is that the text is formatted with multiple
> background "bg" faces: (erc-control-default-bg bg:erc-color-face4
> erc-input-face).
>
> A screenshot illustrating the issue is attached to this message.

Oof. Looks like `erc-get-fg-color-face' sets `erc-control-default-bg' in
its catch-all `cond' case. As you say, this produces:

  #("THIS TEXT IS FORMATTED"
    0 22 (font-lock-face (erc-control-default-bg bg:erc-color-face4)))

And `erc-get-bg-color-face' sets `erc-control-default-fg'. Clearly,
whoever's responsible for this outrage should be banished. (Thanks.)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#69860; Package emacs. (Sun, 17 Mar 2024 17:26:01 GMT) Full text and rfc822 format available.

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

From: Alcor <alcor <at> tilde.club>
To: "J.P." <jp <at> neverwas.me>
Cc: 69860 <at> debbugs.gnu.org,
 Alcor via General discussion about ERC <emacs-erc <at> gnu.org>
Subject: Re: bug#69860: 29.2; ERC 5.6-git: erc: Incorrect face formatting
 applied for fg=99 bg=x (irccontrols module with
 erc-interpret-mirc-color=t)
Date: Sun, 17 Mar 2024 18:23:58 +0100
[Message part 1 (text/plain, inline)]
"J.P." <jp <at> neverwas.me> writes:

> Oof. Looks like `erc-get-fg-color-face' sets `erc-control-default-bg' in
> its catch-all `cond' case. As you say, this produces:
>
>   #("THIS TEXT IS FORMATTED"
>     0 22 (font-lock-face (erc-control-default-bg bg:erc-color-face4)))
>
> And `erc-get-bg-color-face' sets `erc-control-default-fg'. Clearly,
> whoever's responsible for this outrage should be banished. (Thanks.)

Yes, that's part of the issue. However, `erc-controls-propertize' should
also avoid adding the default fg/bg to the font lock face if n=99 to
avoid overriding an existing fg,bg setting if fg=99,bg=x or bg=99,fg=x.

This is trivially fixable and it's possible you already have a fix, but
I'm attaching a patchset that works for me FWIW, just to illustrate what
I had to change in order to make it work.

Cheers,
-A

[0001-Fix-typo-in-erc-get-fg-bg-color-face.patch (text/x-diff, attachment)]
[0002-Fix-wrong-color-rendering-when-bg-99-or-fg-99.patch (text/x-diff, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#69860; Package emacs. (Wed, 20 Mar 2024 14:29:01 GMT) Full text and rfc822 format available.

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

From: "J.P." <jp <at> neverwas.me>
To: Alcor <alcor <at> tilde.club>
Cc: 69860 <at> debbugs.gnu.org,
 Alcor via General discussion about ERC <emacs-erc <at> gnu.org>
Subject: Re: bug#69860: 29.2; ERC 5.6-git: erc: Incorrect face formatting
 applied for fg=99 bg=x (irccontrols module with
 erc-interpret-mirc-color=t)
Date: Wed, 20 Mar 2024 07:27:55 -0700
[Message part 1 (text/plain, inline)]
Alcor <alcor <at> tilde.club> writes:

> "J.P." <jp <at> neverwas.me> writes:
>
>> Oof. Looks like `erc-get-fg-color-face' sets `erc-control-default-bg' in
>> its catch-all `cond' case. As you say, this produces:
>>
>>   #("THIS TEXT IS FORMATTED"
>>     0 22 (font-lock-face (erc-control-default-bg bg:erc-color-face4)))
>>
>> And `erc-get-bg-color-face' sets `erc-control-default-fg'. Clearly,
>> whoever's responsible for this outrage should be banished. (Thanks.)
>
> Yes, that's part of the issue. However, `erc-controls-propertize' should
> also avoid adding the default fg/bg to the font lock face if n=99 to
> avoid overriding an existing fg,bg setting if fg=99,bg=x or bg=99,fg=x.

Here's my current understanding of what you're saying. When there's an
existing fg/bg combo in effect for a given span, and the parsing logic
encounters a ^Cx,99 (or a ^C99,x), the 99 shouldn't induce a clobbering
of the corresponding "incumbent" fg (or bg) face with a dedicated (and
superfluous) default face but instead trigger the _removal_ of said
incumbent face. This has the effect of falling through to honor the
relevant attributes of the underlying `erc-default-face', which ships as
a no-op. For example, given

  ^C03,08 hello ^C99,07 world

the "hello " portion should be green on yellow and " world" should be
${default-foreground} (likely black or white) on orange. Likewise, if
"^C99,07" were instead "^C04", then " world" should be red on yellow.
This behavior aligns with that exhibited by Weechat and (I'm hoping)
other popular clients. The revised patch set (attached) attempts to
mimic this in ERC. Corrections or alternatives welcome. Thanks.

[0001-5.6-Remove-unused-faces-from-various-erc-goodies-tes.patch (text/x-patch, attachment)]
[0002-5.6-Remove-mishandled-erc-control-default-fg-bg-face.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#69860; Package emacs. (Wed, 20 Mar 2024 17:33:02 GMT) Full text and rfc822 format available.

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

From: Alcor <alcor <at> tilde.club>
To: "J.P." <jp <at> neverwas.me>
Cc: 69860 <at> debbugs.gnu.org,
 Alcor via General discussion about ERC <emacs-erc <at> gnu.org>
Subject: Re: bug#69860: 29.2; ERC 5.6-git: erc: Incorrect face formatting
 applied for fg=99 bg=x (irccontrols module with
 erc-interpret-mirc-color=t)
Date: Wed, 20 Mar 2024 18:23:02 +0100
[Message part 1 (text/plain, inline)]
"J.P." <jp <at> neverwas.me> writes:

> Alcor <alcor <at> tilde.club> writes:
> Here's my current understanding of what you're saying. When there's an
> existing fg/bg combo in effect for a given span, and the parsing logic
> encounters a ^Cx,99 (or a ^C99,x), the 99 shouldn't induce a clobbering
> of the corresponding "incumbent" fg (or bg) face with a dedicated (and
> superfluous) default face but instead trigger the _removal_ of said
> incumbent face. This has the effect of falling through to honor the
> relevant attributes of the underlying `erc-default-face', which ships as
> a no-op. For example, given
>
>   ^C03,08 hello ^C99,07 world
>
> the "hello " portion should be green on yellow and " world" should be
> ${default-foreground} (likely black or white) on orange. Likewise, if
> "^C99,07" were instead "^C04", then " world" should be red on yellow.
> This behavior aligns with that exhibited by Weechat and (I'm hoping)
> other popular clients. The revised patch set (attached) attempts to
> mimic this in ERC. Corrections or alternatives welcome. Thanks.

Yes, thanks for putting this in more precise words. "Clobbering" was the
term I was looking for. That was what was happening, with the 99 fg/bg
element introducing a face that clobbers the non-99 fg/bg element.

Just tried the revised patchset out on Emacs 29.2 with the latest Erc,
and things work as expected now (screenshots* attached).

Hopefully the formatting issues should be sorted out now. As usual,
thanks for the great effort & for the time invested into fixing the
"not-so-commonly-used" formatting functionality :)

+1

Cheers,
-A.

*) Checked that on both sender/receiver sides just to be sure it applies
 `erc-input-face' (for the sender) and `erc-default-face' (for the
 recipient side) correctly.

[erc-c99-test-sender.png (image/png, attachment)]
[erc-c99-test-recvr.png (image/png, attachment)]

Reply sent to "J.P." <jp <at> neverwas.me>:
You have taken responsibility. (Thu, 28 Mar 2024 17:32:02 GMT) Full text and rfc822 format available.

Notification sent to Alcor <alcor <at> tilde.club>:
bug acknowledged by developer. (Thu, 28 Mar 2024 17:32:02 GMT) Full text and rfc822 format available.

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

From: "J.P." <jp <at> neverwas.me>
To: Alcor <alcor <at> tilde.club>
Cc: 69860-done <at> debbugs.gnu.org,
 Alcor via General discussion about ERC <emacs-erc <at> gnu.org>
Subject: Re: bug#69860: 29.2; ERC 5.6-git: erc: Incorrect face formatting
 applied for fg=99 bg=x (irccontrols module with
 erc-interpret-mirc-color=t)
Date: Thu, 28 Mar 2024 10:31:06 -0700
Alcor <alcor <at> tilde.club> writes:

> Just tried the revised patchset out on Emacs 29.2 with the latest Erc,
> and things work as expected now (screenshots* attached).
>
> Hopefully the formatting issues should be sorted out now. As usual,
> thanks for the great effort & for the time invested into fixing the
> "not-so-commonly-used" formatting functionality :)
>
> +1

This has been installed as:

  525bc083155 * Remove mishandled erc-control-default-{fg,bg} faces

Thanks and closing.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 26 Apr 2024 11:26:12 GMT) Full text and rfc822 format available.

This bug report was last modified 8 days ago.

Previous Next


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