|
From: | J.P. |
Subject: | bug#67677: 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))
0001-5.6-Define-ERC-message-formatting-templates-with-def.patch
Description: Text Data
0002-5.6-Sequester-some-special-variable-declarations-in-.patch
Description: Text Data
0003-5.6-Double-hyphenate-internal-ERC-5.6-text-props.patch
Description: Text Data
0004-5.6-Add-erc-spkr-text-property-to-chat-messages.patch
Description: Text Data
0005-5.6-Add-utility-for-iterating-over-arrays-in-ERC.patch
Description: Text Data
0006-5.6-Make-erc-input-s-refoldp-slot-conditionally-avai.patch
Description: Text Data
0007-5.6-Add-erc-server-396-response-handler.patch
Description: Text Data
0008-5.6-Clarify-warning-for-process-dependent-input-in-E.patch
Description: Text Data
0009-5.6-Make-erc-get-user-mode-prefix-more-flexible.patch
Description: Text Data
0010-5.6-Skip-erc-ignored-user-p-when-erc-ignore-list-is-.patch
Description: Text Data
0011-5.6-Use-templates-for-formatting-chat-messages-in-ER.patch
Description: Text Data
[Prev in Thread] | Current Thread | [Next in Thread] |