all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Emanuel Berg <incal@dataswamp.org>
To: 68401@debbugs.gnu.org
Cc: emacs-erc@gnu.org
Subject: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt
Date: Mon, 22 Jan 2024 11:18:19 +0100	[thread overview]
Message-ID: <87wms1k6xg.fsf@dataswamp.org> (raw)
In-Reply-To: <87v87yvnly.fsf@dataswamp.org>

J.P. wrote:

> Make erc-cmd-AMSG session-local, add /GMSG /AME /GME
>
> * lisp/erc/erc.el (erc-cmd-AMSG): Make good on behavior described in
> the doc string by limiting damage to the current connection.
> (erc-cmd-GMSG, erc-cmd-GME, erc-cmd-AME): New functions, all IRC
> "slash commands".  (Bug#68401)

Okay, I'll use that instead. But let's agree on the
source first.

> I question the wisdom of having new slash commands serve
> double duty as interactive Emacs commands (at least those
> handling chat input). This reservation has nothing to do
> with M-x erc-cmd-FOO <RET> being less faithful (or whatever)
> to the traditional IRC experience than /FOO <RET>. Rather,
> it stems from a need to prioritize consistent feedback and
> promote maintainability by only having a single path for
> chat input to reach the server (except under special
> circumstances).

I made them interactive as `erc-cmd-AMSG' is interactive, but
let's remove it from the other three then.

[ As a side note, Emacs has a problem with different
  interfaces doing too much and influencing the behavior of
  their functions. Interfaces should just be different ways of
  setting the formal parameters, after that the exact same
  thing should happen for the same data. ]

>> (setq line (erc-trim-string line))
>
> It might be nice to remove at most one space, for cases
> where a user wants to send preformatted text. OTOH, normal
> /MSG doesn't do this, so perhaps we shouldn't here either.

Again, this is in the original `erc-cmd-AMSG'. I have no
opinion, so you can decide it.

"At most one space", what space should that be? Leading or
trailing? This is nothing `erc-trim-string' can do BTW. But we
can of course still remove whatever spaces we like.

>>    (erc-with-all-buffers-of-server nil
>> -    (lambda ()
>> -      (erc-channel-p (erc-default-target)))
>> +    (lambda () (erc-channel-p (erc-default-target)))
>> +    (erc-send-message line)))
>
> Without first checking for connectivity, we run into another
> situation in which messages may be inserted but not sent,
> similar to the bit about commands being potentially
> "misleading," above. The most obvious way to solve this is
> to check for "physical" connectivity with something like:
>
>   (erc-with-all-buffers-of-server nil #'erc-server-process-alive
>     (when (and erc--target (erc--current-buffer-joined-p))
>       (erc-send-message line))))
>
> Alternatively, you can check for "logical" connectivity,
> which is probably more in keeping with traditional design
> principles:
>
>   (erc-with-all-buffers-of-server nil nil
>     (when (and erc-server-connected erc--target (erc--current-buffer-joined-p))
>       (erc-send-message line))))
>
> One minor downside of this second method is that IRC
> adjacent protocols and aberrant proxy servers that happen to
> skip 376/422 and also provide some (possibly &local)
> "control channel" won't be detected. (BTW, you won't be
> needing the `erc--target' in either example if you rebase
> atop the latest master.)

Okay, but instead of having these checks embedded and
hopefully correctly repeated four times, shouldn't we have two
functions, say "erc-connected-physical-p" and
"erc-connected-logical-p" and call either of those (or both)
from the functions?

>> +(put 'erc-cmd-GMSG 'do-not-parse-args t)
>> +
>> +(defun erc-cmd-AMSG (line)
>> +  "Send LINE to all channels of the current network.
>> +Interactively, prompt for the line of text to send."
>> +  (interactive "sSend to all channels on this network: ")
>> +  (setq line (erc-trim-string line))
>> +  (erc-with-all-buffers-of-server erc-server-process
>> +    (lambda () (erc-channel-p (erc-default-target)))
>
>          ^ Indentation. This macro is declared "indent 2"

Okay, fixed that.

> rebase

How do you do that, just 'git pull'?

-- 
underground experts united
https://dataswamp.org/~incal






  reply	other threads:[~2024-01-22 10:18 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <87v87yvnly.fsf@dataswamp.org>
2024-01-12 12:08 ` bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt Eli Zaretskii
2024-01-12 14:12   ` Emanuel Berg
2024-01-12 14:39     ` Eli Zaretskii
2024-01-13  2:09       ` Emanuel Berg
2024-01-13  2:31         ` Emanuel Berg
2024-01-13  2:45           ` Emanuel Berg
2024-01-13  7:23           ` Eli Zaretskii
2024-01-14  9:11             ` Emanuel Berg
     [not found] ` <834jfikb4d.fsf@gnu.org>
2024-01-12 12:36   ` Emanuel Berg
     [not found]   ` <87ply6vidl.fsf@dataswamp.org>
2024-01-12 14:03     ` Eli Zaretskii
2024-01-12 14:30       ` Emanuel Berg
     [not found]   ` <87mstavias.fsf@dataswamp.org>
     [not found]     ` <87wmseoskl.fsf@dataswamp.org>
2024-01-19  2:58       ` J.P.
2024-01-22 10:18         ` Emanuel Berg [this message]
2024-01-22 15:11           ` J.P.
2024-01-22 17:00             ` Emanuel Berg
2024-01-22 19:23               ` Emanuel Berg
     [not found]                 ` <87y1ch851b.fsf@igel.home>
2024-01-22 21:05                   ` Emanuel Berg
2024-01-22 21:27                 ` J.P.
2024-01-23  4:25                   ` Emanuel Berg
2024-01-23  4:32                     ` Emanuel Berg
2024-01-23  6:20                       ` Emanuel Berg
2024-01-23 13:31                         ` Emanuel Berg
2024-01-24  0:36                           ` J.P.
2024-01-24  0:56                             ` Emanuel Berg
2024-01-24  1:38                               ` J.P.
2024-01-24  2:01                                 ` Emanuel Berg
2024-01-23 13:42         ` Emanuel Berg
2024-01-24  0:34           ` J.P.
2024-01-24  1:28             ` Emanuel Berg
2024-01-24  1:38               ` Emanuel Berg
2024-01-24 11:15               ` Emanuel Berg
2024-01-24 11:55                 ` Emanuel Berg
2024-02-05  0:52                   ` Emanuel Berg
2024-02-06  3:44                     ` J.P.
2024-02-11  1:58                       ` Emanuel Berg
2024-02-11  2:27                       ` Emanuel Berg
2024-02-11  3:30                         ` Emanuel Berg
2024-02-11  3:52                           ` Emanuel Berg
2024-02-14  1:42                             ` J.P.
2024-02-17  5:21                               ` Emanuel Berg
2024-02-17  8:52                               ` Emanuel Berg
2024-02-21  1:11                                 ` J.P.
     [not found]                                 ` <87ttm2boza.fsf@neverwas.me>
2024-02-21  1:16                                   ` Emanuel Berg
2024-03-01  0:18                                     ` J.P.
2024-01-12 10:43 Emanuel Berg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87wms1k6xg.fsf@dataswamp.org \
    --to=incal@dataswamp.org \
    --cc=68401@debbugs.gnu.org \
    --cc=emacs-erc@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.