emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#67677: closed (30.0.50; ERC 5.6: Use templates for formatting chat m


From: GNU bug Tracking System
Subject: bug#67677: closed (30.0.50; ERC 5.6: Use templates for formatting chat messages)
Date: Thu, 01 Feb 2024 03:15:02 +0000

Your message dated Wed, 31 Jan 2024 19:14:25 -0800
with message-id <87zfwkri3y.fsf@neverwas.me>
and subject line Re: bug#67677: 30.0.50; ERC 5.6: Use templates for formatting 
chat messages
has caused the debbugs.gnu.org bug report #67677,
regarding 30.0.50; ERC 5.6: Use templates for formatting chat messages
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@gnu.org.)


-- 
67677: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=67677
GNU Bug Tracking System
Contact help-debbugs@gnu.org with problems
--- Begin Message --- Subject: 30.0.50; ERC 5.6: Use templates for formatting chat messages Date: Wed, 06 Dec 2023 23:06:35 -0800 User-agent: Gnus/5.13 (Gnus v5.13)
Tags: patch

The most valuable messages in a typical target buffer are those
featuring a leading display name, i.e., chat messages. While ERC's many
modules exert a good deal of influence over the fit and finish of an
inserted "speaker message," the fundamental layout is mostly set in
stone beforehand. This currently happens in a somewhat haphazard
fashion, with ERC cobbling together various ingredients that may or may
not factor into the finished article, which makes predicting and
influencing crucial aspects of the final look a somewhat shaky affair.

Longtime users are likely acquainted with ERC's notion of a "language
catalog." On the surface, these are just collections of variables
sharing a common "erc-message-<catalog>-<key>" naming scheme. Each
variable's value is a `format-spec' template befitting its key. Some
keys are just IRC commands, like `JOIN', while others describe the
context in which they're typically summoned.

The real benefit of these template catalogs is twofold:

  1. They're "declarative" in the sense that their form describes their
     purpose as a model preview of the result, in plain, quasi-literal
     terms (what you see is what you get).

  2. They're also an interface, with each collection of keys and their
     respective format strings and spec parameters forming a schema of
     sorts, making extensibility essentially ingrained.

The catch here is that ERC only currently uses these catalogs for select
informative messages but not actual chat content. The proposal is thus
to extend this catalog system to encompass speaker messages.

The approach I've chosen tries to strike a balance between code reuse
and extensibility and disregards seemingly vital distinctions, like
whether a message is being sent or received. Instead, it prefers to
organize things in terms of envelope semantics. Who is it from? How
should it be delivered? Etc. The answers become parameters that form the
various catalog keys, for example, "ctcp-action-statusmsg" or
"query-notice-input". Most of these combinations come prescribed by the
IRC protocol itself and by compatibility concerns. It's mostly just the
terminology and the ordering of the components that we're free to tinker
with.

So far, the most perceptible gains are maintenance oriented. But moving
toward user-facing extensibility is mainly a matter of nailing down the
core set of keys for the base speaker catalog and exposing custom
catalogs by promoting what's currently an internal variable to a user
option. At that point, the possibilities are many. For example, over the
years, folks have expressed a desire to have both "heading-style"
display names, which occupy their own line above a message body, and
"bracketless" display names. Both are easily doable with such a system
in place. (PoC available.)

I was originally hoping to tackle this feature in 5.7, but I think the
proposed approach is mature enough to refine and ship with this release.
A number of tangential and ancillary changes are included in this set as
soft dependencies, many as follow-ons to recently "closed" bugs. I will
address some of them separately, as needed, in their respective threads.

Thanks.


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))

Attachment: 0001-5.6-Define-ERC-message-formatting-templates-with-def.patch
Description: Text Data

Attachment: 0002-5.6-Sequester-some-special-variable-declarations-in-.patch
Description: Text Data

Attachment: 0003-5.6-Double-hyphenate-internal-ERC-5.6-text-props.patch
Description: Text Data

Attachment: 0004-5.6-Add-erc-spkr-text-property-to-chat-messages.patch
Description: Text Data

Attachment: 0005-5.6-Add-utility-for-iterating-over-arrays-in-ERC.patch
Description: Text Data

Attachment: 0006-5.6-Make-erc-input-s-refoldp-slot-conditionally-avai.patch
Description: Text Data

Attachment: 0007-5.6-Add-erc-server-396-response-handler.patch
Description: Text Data

Attachment: 0008-5.6-Clarify-warning-for-process-dependent-input-in-E.patch
Description: Text Data

Attachment: 0009-5.6-Make-erc-get-user-mode-prefix-more-flexible.patch
Description: Text Data

Attachment: 0010-5.6-Skip-erc-ignored-user-p-when-erc-ignore-list-is-.patch
Description: Text Data

Attachment: 0011-5.6-Use-templates-for-formatting-chat-messages-in-ER.patch
Description: Text Data


--- End Message ---
--- Begin Message --- Subject: Re: bug#67677: 30.0.50; ERC 5.6: Use templates for formatting chat messages Date: Wed, 31 Jan 2024 19:14:25 -0800 User-agent: Gnus/5.13 (Gnus v5.13)
Further work on this will be handled by bug#68861:

  30.0.50; ERC 5.x: Introduce a modern message-insertion API

Closing (again).


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]