[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `er
From: |
J.P. |
Subject: |
Re: 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 07:11:14 -0800 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Emanuel Berg <incal@dataswamp.org> writes:
> 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?
Leading. See the test for `erc-extract-command-from-line' to understand
the behavior of `do-not-parse-args', which determines LINE. Actually, if
we're doing away with `commandp', there should be no reason for "at most
one," only "exactly one" (IIRC).
> This is nothing `erc-trim-string' can do BTW. But we
> can of course still remove whatever spaces we like.
I wasn't implying you ought to change `erc-trim-string' but rather that
you can replace its call with an expression to remove a leading space.
>
>>> (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?
If you want to factor out a common helper function, fine by me. AFAICT
such a thing would need to include `erc-with-all-buffers-of-server' to
be effective unless the predicates you've named alone result in
meaningful code reuse. (Not sure how an `erc-connected-physical-p' would
be any different than the existing 'erc-server-process-alive', though I
suppose an `erc-connected-logical-p' could be useful if it just returns
`erc-server-connected'.)
>>> +(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'?
Assuming you have your work on "my-branch"
$ git checkout master
$ git pull
$ git rebase master my-branch.
If you applied the unit-test patch atop your commit, you won't be able
to "git commit --amend" your previous changes. See the "-i,
--interactive" option for git-rebase(1), then maybe rearrange things so
your patch comes *after* the test. You can always "git rebase --abort"
if you mess up. And there's always #git on Libera.
- bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, Emanuel Berg, 2024/01/12
- Re: 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
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, Emanuel Berg, 2024/01/12
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, Emanuel Berg, 2024/01/12
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, Emanuel Berg, 2024/01/12
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, J.P., 2024/01/18
- Message not available
- Message not available
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt,
J.P. <=
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, Emanuel Berg, 2024/01/22
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, Emanuel Berg, 2024/01/22
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, Andreas Schwab, 2024/01/22
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, Emanuel Berg, 2024/01/22
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, J.P., 2024/01/22
- Message not available
- Message not available
- Message not available
- Message not available
- Message not available
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, J.P., 2024/01/23
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, Emanuel Berg, 2024/01/23
- Message not available
- Message not available
- Message not available
- Message not available
- Message not available
- Message not available
- Message not available
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, J.P., 2024/01/23
- Message not available
- Message not available
- Re: bug#68401: 30.0.50; ERC 5.6-git: `erc-cmd-GMSG', `erc-cmd-AMSG', `erc-cmd-GME', `erc-cmd-AME'. 2nd attempt, J.P., 2024/01/23