GNU bug report logs - #68265
30.0.50; ERC 5.6: Simplify alternate text insertion for outgoing messages

Previous Next

Package: emacs;

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

Date: Fri, 5 Jan 2024 14:56:01 UTC

Severity: wishlist

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 68265 in the body.
You can then email your comments to 68265 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#68265; Package emacs. (Fri, 05 Jan 2024 14:56:01 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. (Fri, 05 Jan 2024 14:56:01 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: Simplify alternate text insertion for outgoing
 messages
Date: Fri, 05 Jan 2024 06:54:55 -0800
[Message part 1 (text/plain, inline)]
Tags: patch

Spoofing messages submitted at the prompt is currently a chore. By this,
I mean inserting chat content that differs from what's actually sent.
For years, users have resorted to all manner of awkward finagling
(typically in `erc-send-modify-hook' members) to accomplish "simple"
things, like finding where the leading speaker portion ends and the
message proper begins.

The proposal here is to add an "alternate text" slot to the `erc-input'
object passed around by `erc-pre-send-functions'. Use cases include

 - language translation
 - sub-protocol encoding
 - the IRCv3 multiline extension

For the upcoming release, users will already have to recompile their
dependent packages, so we might as well seize this opportunity to modify
core schemata (if truly warranted).

Demo implementation for an existing third-party package forthcoming.

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 2024-01-04 built on localhost
Repository revision: 1081e975c9370999df1a288b117bfd9053050d21
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 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 erc derived auth-source eieio
eieio-core password-cache json map format-spec erc-backend erc-networks
easy-mmode byte-opt bytecomp byte-compile erc-common inline cl-extra
help-mode erc-compat cl-seq cl-macs gv pcase rx subr-x cl-loaddefs
cl-lib 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 149907 11404) (symbols 48 11361 0) (strings 32 27740 4779)
 (string-bytes 1 971593) (vectors 16 17647)
 (vector-slots 8 310679 13296) (floats 8 27 25) (intervals 56 330 0)
 (buffers 976 12))

[0001-5.6-Make-erc-send-input-lines-a-normal-function.patch (text/x-patch, attachment)]
[0002-5.6-Allow-setting-erc-split-line-length-to-zero.patch (text/x-patch, attachment)]
[0003-5.6-Make-ERC-s-format-catalogs-more-extensible.patch (text/x-patch, attachment)]
[0004-5.6-Add-replacement-text-field-to-erc-input-struct.patch (text/x-patch, attachment)]

Severity set to 'wishlist' from 'normal' Request was from Stefan Kangas <stefankangas <at> gmail.com> to control <at> debbugs.gnu.org. (Wed, 10 Jan 2024 17:30:03 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#68265; Package emacs. (Fri, 12 Jan 2024 16:22:02 GMT) Full text and rfc822 format available.

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

From: "J.P." <jp <at> neverwas.me>
To: 68265 <at> debbugs.gnu.org
Cc: emacs-erc <at> gnu.org
Subject: Re: bug#68265: 30.0.50; ERC 5.6: Simplify alternate text insertion
 for outgoing messages
Date: Fri, 12 Jan 2024 08:21:21 -0800
[Message part 1 (text/plain, inline)]
"J.P." <jp <at> neverwas.me> writes:

> Demo implementation for an existing third-party package forthcoming.

The demo described below illustrates a realistic use case for three
closely related features: the one offered by this bug, the existing
template-catalog framework, and the newly proposed hook-based "msgfspec"
interface from bug67677. See that thread for the latest version of these
changes as well.

As an example of how this is meant to work, I've chosen to modify a
project recently shared on Libera.Chat by an ERC user. It's an informal
"fork" of erc-crypt that includes semi-automated Diffie-Hellman key
exchange. For those not familiar, the package allows two parties to
converse privately, in band, in a manner roughly analogous to OTR. The
three most recent commits (mine) demonstrate overlapping ways of
adapting the existing code to leverage what's hopefully an improved menu
of interface options for influencing message formatting and insertion:

  1. the "alternate text" slot of `erc-input' (this bug)

  2. ERC's template-catalog framework for dictating how "speaker"
     message's appear when inserted (internal)

  3. the public-facing side of (2), a hook-based interface called
     "msgfspec" that exposes individual components of a message template
     prior to formatting

In case my original post wasn't clear, the main win offered by this
combined, multifaceted approach over existing offerings is improved
interoperability with other modules.

The demo code is temporarily hosted in ERC's CI forge [1], and the
relevant changes live in the last few commits of that repo. They roughly
align with the three interfaces listed above, and the contrast between
them hopefully reveals an obvious progression in terms of brevity,
control, and flexibility. I've exported the changes in patch form for
convenience, but you'll obviously have to clone the repo to try it. In
addition to the commit messages and code comments, please see the recent
activity in bug67677, whose latest patches are also required for the
demo to work.

Thanks.


[1] https://gitlab.com/emacs-erc/bug68265-demo.git

    To actually run it, you need to fire up two emacs -Q instances, and
    evaluate the following, ensuring `nick' is distinct in each.
    
      (require 'erc)
      (erc-toggle-debug-irc-protocol)
      (toggle-debug-on-error)
      (with-current-buffer "*erc-protocol*" (toggle-truncate-lines))
    
      (setq erc-fill-function 'erc-fill-static
            erc-autojoin-channels-alist '((foonet "#test"))
            erc-modules (cons 'crypt erc-modules))
    
      (let* ((nick "bob")
             ;;     ^~~~~~~~~~~~~~~~~~~ change this per instance!
             (erc-crypt-dir-userdef
              (expand-file-name (format "erc-crypt/%s/" nick)
                                (temporary-file-directory))))
        (make-directory erc-crypt-dir-userdef 'parents)
        (require 'erc-crypt)
    
        (with-current-buffer
            (erc :server "127.0.0.1" :nick nick)
          (unless (file-exists-p (expand-file-name
                                  "secret" erc-crypt-dir-userdef))
            (erc-cmd-CRYPT "genkeys"))))
    
    Once you're up and running, navigate to the #test buffer, and type
    "/crypt dh <othernick>", where "<othernick>" is the `nick' specified
    for the _other_ instance. After that, type "/query <othernick>", and
    commence chatting as usual. If you take a look at the
    "*erc-protocol*" buffer, you'll see all new messages are encrypted.
    If you're bored, try sending a giant multiline message.

[0001-POC-Use-erc-pre-send-functions-API.patch (text/x-patch, attachment)]
[0002-POC-Use-format-template-based-API.patch (text/x-patch, attachment)]
[0003-POC-Use-proposed-msgfspec-API.patch (text/x-patch, attachment)]

Reply sent to "J.P." <jp <at> neverwas.me>:
You have taken responsibility. (Thu, 25 Jan 2024 21:48:02 GMT) Full text and rfc822 format available.

Notification sent to "J.P." <jp <at> neverwas.me>:
bug acknowledged by developer. (Thu, 25 Jan 2024 21:48:02 GMT) Full text and rfc822 format available.

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

From: "J.P." <jp <at> neverwas.me>
To: 68265-done <at> debbugs.gnu.org
Cc: emacs-erc <at> gnu.org
Subject: Re: bug#68265: 30.0.50; ERC 5.6: Simplify alternate text insertion
 for outgoing messages
Date: Thu, 25 Jan 2024 13:47:21 -0800
"J.P." <jp <at> neverwas.me> writes:

> Tags: patch
>
> Spoofing messages submitted at the prompt is currently a chore. By this,
> I mean inserting chat content that differs from what's actually sent.
> For years, users have resorted to all manner of awkward finagling
> (typically in `erc-send-modify-hook' members) to accomplish "simple"
> things, like finding where the leading speaker portion ends and the
> message proper begins.
>
> The proposal here is to add an "alternate text" slot to the `erc-input'
> object passed around by `erc-pre-send-functions'. Use cases include
>
>  - language translation
>  - sub-protocol encoding
>  - the IRCv3 multiline extension
>
> For the upcoming release, users will already have to recompile their
> dependent packages, so we might as well seize this opportunity to modify
> core schemata (if truly warranted).
>
> Demo implementation for an existing third-party package forthcoming.
>
> Thanks.

Although I've installed this feature [1], the larger initiative of
exposing a more convenient and predictable message-insertion API remains
unresolved. Please see bug#67677 for additional progress toward this
end, including updated patches relevant to the above mentioned demo.
Thanks and closing.

[1] https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=d6be068f




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

This bug report was last modified 1 year and 180 days ago.

Previous Next


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