unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Fixing post-self-insert-hook.
@ 2021-09-17 19:37 Alan Mackenzie
  2021-09-17 20:04 ` Stefan Monnier
                   ` (2 more replies)
  0 siblings, 3 replies; 23+ messages in thread
From: Alan Mackenzie @ 2021-09-17 19:37 UTC (permalink / raw)
  To: emacs-devel; +Cc: João Távora

Hello, Emacs.

For some while, there's been a problem with post-self-insert-hook.  Not
the hook itself, but what is sometimes done with it.

What is sometimes done with it is to effect buffer changes additional to
the prime change caused by self-insert-function.  This is the case, for
example, with electric-pair-post-self-insert-function.  Usually, when
self-insert-function is called from a key binding, this is harmless.  The
key gets inserted, then the auxiliary buffer changes take place.  Fine.

What isn't fine is when self-insert-function is called from Lisp, as it
is 293 times from our sources, including from cc-cmds.el.  The calling
Lisp function expects (usually) exactly one copy of the pressed key to be
inserted into the buffer.  With the pertinent post-self-insert-hook
functions in place, this certainty is lost.  There could be none, one,
two, or even many characters inserted.  This can wreck the functionality
of the Lisp function.

This is precisely what happened in quite a few c-electric-* functions,
and the uneasy workaround was to bind post-self-insert-hook to nil around
calls to self-insert-function, giving certainty back to the processing,
and try to compensate for this elsewhere.

This is clearly unsatisfactory.

#########################################################################

Given that it is now (at least politically) impossible to ban buffer
changing post-self-insert-hook functions, I propose to change the time at
which the hook gets called.

Instead of getting called straight after the self-insert-command, it
should be called at the end of the command which called
self-insert-command.  Just before post-command-hook, perhaps.  Yes there
are details to be worked out.

This will make no difference to the usual self-insert-command call.  It
will, however, restore the certainty of processing to Lisp code such as
c-electric-brace without having to resort to ugly workarounds.

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-17 19:37 Fixing post-self-insert-hook Alan Mackenzie
@ 2021-09-17 20:04 ` Stefan Monnier
  2021-09-17 20:53   ` Alan Mackenzie
  2021-09-17 20:15 ` João Távora
  2021-09-18  5:50 ` Eli Zaretskii
  2 siblings, 1 reply; 23+ messages in thread
From: Stefan Monnier @ 2021-09-17 20:04 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel, João Távora

> What is sometimes done with it is to effect buffer changes additional to
> the prime change caused by self-insert-function.

FWIW, I think the above "sometimes" really means "always" or "almost
always" ;-)
[ That was the primary motivation for the addition of this hook.  ]

> What isn't fine is when self-insert-function is called from Lisp, as it
> is 293 times from our sources, including from cc-cmds.el.

The question here is why those effects are undesirable while the other
effects (like auto-fill or abbrev expansion) aren't.

I suspect that those 293 uses fall into roughly 3 different camps:

- Those that really do want the full `self-insert-command` effects.
- Those that call `self-insert-command` mostly because the author didn't
  know better and they should really call `insert` instead.
- The rest that wants more than `insert` but less than
  `self-insert-command`.

The last group might indeed deserve a new function.


        Stefan


PS: I do have one regret regarding `post-self-insert-hook`: I should
    have defined a `self-insert-function` variable instead.  This is
    because some of the `post-self-insert-hook` functions would be
    cleaner if they could be turned into (add-function :around
    self-insert-function ...).
    Sadly, `add-function` didn't exist back then :-(




^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-17 19:37 Fixing post-self-insert-hook Alan Mackenzie
  2021-09-17 20:04 ` Stefan Monnier
@ 2021-09-17 20:15 ` João Távora
  2021-09-17 20:35   ` Alan Mackenzie
  2021-09-18  5:50 ` Eli Zaretskii
  2 siblings, 1 reply; 23+ messages in thread
From: João Távora @ 2021-09-17 20:15 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel

Alan Mackenzie <acm@muc.de> writes:

> What isn't fine is when self-insert-function is called from Lisp, as it
> is 293 times from our sources, including from cc-cmds.el.  The calling
[...]
> Instead of getting called straight after the self-insert-command, it
> should be called at the end of the command which called
> self-insert-command.  Just before post-command-hook, perhaps.  Yes there
> are details to be worked out.

Let me get this straight: are you are proposing that 283 +
who-knows-how-many third-party references to 'self-insert-command' --
which all have been working fine as far as we know -- should _change_ to
accomodate the 10 problematic calls that are found in cc-cmds.el?

Best regards,
João



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-17 20:15 ` João Távora
@ 2021-09-17 20:35   ` Alan Mackenzie
  2021-09-17 20:48     ` João Távora
  2021-09-18  5:59     ` Eli Zaretskii
  0 siblings, 2 replies; 23+ messages in thread
From: Alan Mackenzie @ 2021-09-17 20:35 UTC (permalink / raw)
  To: João Távora; +Cc: emacs-devel

Hello, João.

On Fri, Sep 17, 2021 at 21:15:33 +0100, João Távora wrote:
> Alan Mackenzie <acm@muc.de> writes:

> > What isn't fine is when self-insert-function is called from Lisp, as it
> > is 293 times from our sources, including from cc-cmds.el.  The calling
> [...]
> > Instead of getting called straight after the self-insert-command, it
> > should be called at the end of the command which called
> > self-insert-command.  Just before post-command-hook, perhaps.  Yes there
> > are details to be worked out.

> Let me get this straight: are you are proposing that 283 +
> who-knows-how-many third-party references to 'self-insert-command' --
> which all have been working fine as far as we know -- should _change_ to
> accomodate the 10 problematic calls that are found in cc-cmds.el?

Actually, I miscounted, sorry, it's 111 calls to self-insert-command.
But that's still a lot.

The point is, these calls are currently undefined.  Pretty much every
last one of them, apart from the ones in cc-cmds.el, which have been
made defined again.

These 111 calls might have been working, they might not, they might have
sort of been working as long as electric-pair-mode isn't enabled.  Who
knows?  They're currently in a sort of race condition.

But most of these calls, I guess, were there long before
post-self-insert-hook, and they were working then.  They would work
again if the call to p-s-i-h was delayed.

So, yes, you're basically right.  We should move the call to p-s-i-h not
just to fix the interface to electric-pair-mode and friends, but to
bring sanity back to Emacs with respect to this matter.

You have recently said you don't want to change the mechanism of the
electric-... functionality.  This is one way to fix it without you
having to make any such changes.  Can you see any concrete problems with
making this change?

> Best regards,
> João

--  
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-17 20:35   ` Alan Mackenzie
@ 2021-09-17 20:48     ` João Távora
  2021-09-18  5:59     ` Eli Zaretskii
  1 sibling, 0 replies; 23+ messages in thread
From: João Távora @ 2021-09-17 20:48 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel

On Fri, Sep 17, 2021 at 9:35 PM Alan Mackenzie <acm@muc.de> wrote:

> > Let me get this straight: are you are proposing that 283 +
> > who-knows-how-many third-party references to 'self-insert-command' --
> > which all have been working fine as far as we know -- should _change_ to
> > accomodate the 10 problematic calls that are found in cc-cmds.el?
>
> So, yes, you're basically right.

Thanks.  Just checking.

Best regards,
João



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-17 20:04 ` Stefan Monnier
@ 2021-09-17 20:53   ` Alan Mackenzie
  2021-09-17 21:45     ` João Távora
  2021-09-18 14:15     ` Stefan Monnier
  0 siblings, 2 replies; 23+ messages in thread
From: Alan Mackenzie @ 2021-09-17 20:53 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: João Távora, emacs-devel

Hello, Stefan.

On Fri, Sep 17, 2021 at 16:04:58 -0400, Stefan Monnier wrote:
> > What is sometimes done with it is to effect buffer changes additional
> > to the prime change caused by self-insert-function.

> FWIW, I think the above "sometimes" really means "always" or "almost
> always" ;-)
> [ That was the primary motivation for the addition of this hook.  ]

> > What isn't fine is when self-insert-function is called from Lisp, as it
> > is 293 times from our sources, including from cc-cmds.el.

Actually, it was just 111, not 293.  Sorry.

> The question here is why those effects are undesirable while the other
> effects (like auto-fill or abbrev expansion) aren't.

It's because it's like making a buffer change in an after-change function
(that is an insertion or a deletion, not just a text-property change).
There's no way for the calling function to keep track of what's done.
This was the cause of bug #33794 in January 2019.

> I suspect that those 293 uses fall into roughly 3 different camps:

> - Those that really do want the full `self-insert-command` effects.
> - Those that call `self-insert-command` mostly because the author didn't
>   know better and they should really call `insert` instead.
> - The rest that wants more than `insert` but less than
>   `self-insert-command`.

> The last group might indeed deserve a new function.

That may be so, but the point is, an indeterminate part of these 111
calls is currently undefined.  The effect of self-insert-function called
from Lisp is wholly dependent on what happens to be in post-s-i-h.  You
might get no characters inserted, you might get 1 or 2, you might get
many.  You just can't know at programming time.

However, if the call to post-self-insert-hook were to be postponed to the
end of the function, all the 111 Lisp calls would be defined again, and
they would do the same as they did before post-s-i-h came along.

>         Stefan


> PS: I do have one regret regarding `post-self-insert-hook`: I should
>     have defined a `self-insert-function` variable instead.  This is
>     because some of the `post-self-insert-hook` functions would be
>     cleaner if they could be turned into (add-function :around
>     self-insert-function ...).
>     Sadly, `add-function` didn't exist back then :-(

I actually disagree with this (or I'm lacking some knowledge).  With M-:
post-self-insert-function<CR> you can see what's in the hook, and with a
little bit of delq, and so on, can change it for testing purposes.  I
don't think you can do any of that with an add-function type structure.
Please tell me if I'm wrong, here.  Thanks!

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-17 20:53   ` Alan Mackenzie
@ 2021-09-17 21:45     ` João Távora
  2021-09-18  6:08       ` tomas
  2021-09-18 14:15     ` Stefan Monnier
  1 sibling, 1 reply; 23+ messages in thread
From: João Távora @ 2021-09-17 21:45 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Stefan Monnier, emacs-devel

Alan Mackenzie <acm@muc.de> writes:

> Actually, it was just 111, not 293.  Sorry.

Are you familiar with the GitHub platform? It's averse to the FSF and
software freedom in some ways, but it also hosts much source code and
has a moderately useful search tool for code "in the wild".

Here's a pertinent search "self-insert-command":

   https://github.com/search?p=6&q=self-insert-command&type=Code

It lists almost 83 thousand hits in emacs lisp, many in forks of Emacs,
and many more in user configurations or packages we don't know about.  I
found it curious that it doesn't take much page turning to find users
undoing problematic bindings in c-mode-base-map back to
self-insert-command.  I do this myself but seem to be joined by others.

I find also interesting how, given such pervasive usage of
self-insert-command and reasonable popularity of electric-pair-mode (8k
hits in the same search), the on-default of electric-indent-mode, etc,
our bug tracker isn't overflowing with bug reports about electric modes,
post-self-insert-hook or their "undefined behaviour" or "race condition"
(as you describe them).  The only ones I know about are about cc-mode.el

Best regards,
João

PS: If people know of electric-pair-mode related bugs for other major
modes (_not cc-mode_), please forward them to me for analysis.  Thanks
in advance.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-17 19:37 Fixing post-self-insert-hook Alan Mackenzie
  2021-09-17 20:04 ` Stefan Monnier
  2021-09-17 20:15 ` João Távora
@ 2021-09-18  5:50 ` Eli Zaretskii
  2021-09-18  9:57   ` Alan Mackenzie
  2 siblings, 1 reply; 23+ messages in thread
From: Eli Zaretskii @ 2021-09-18  5:50 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: joaotavora, emacs-devel

> Date: Fri, 17 Sep 2021 19:37:27 +0000
> From: Alan Mackenzie <acm@muc.de>
> Cc: João Távora <joaotavora@gmail.com>
> 
> Given that it is now (at least politically) impossible to ban buffer
> changing post-self-insert-hook functions, I propose to change the time at
> which the hook gets called.
> 
> Instead of getting called straight after the self-insert-command, it
> should be called at the end of the command which called
> self-insert-command.  Just before post-command-hook, perhaps.  Yes there
> are details to be worked out.
> 
> This will make no difference to the usual self-insert-command call.  It
> will, however, restore the certainty of processing to Lisp code such as
> c-electric-brace without having to resort to ugly workarounds.

If CC Mode has problem with these hooks, it could bind them to nil
around the call to self-insert-command, couldn't it?  That'd be much
better than making any globally-visible change in behavior, for which
we cannot possibly know the unintended consequences.

In any case, please let's not make this change before the emacs-28
branch is cut, as it can potentially disrupt many places.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-17 20:35   ` Alan Mackenzie
  2021-09-17 20:48     ` João Távora
@ 2021-09-18  5:59     ` Eli Zaretskii
  2021-09-18  9:41       ` Alan Mackenzie
  1 sibling, 1 reply; 23+ messages in thread
From: Eli Zaretskii @ 2021-09-18  5:59 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: joaotavora, emacs-devel

> Date: Fri, 17 Sep 2021 20:35:50 +0000
> From: Alan Mackenzie <acm@muc.de>
> Cc: emacs-devel@gnu.org
> 
> The point is, these calls are currently undefined.  Pretty much every
> last one of them, apart from the ones in cc-cmds.el, which have been
> made defined again.
> 
> These 111 calls might have been working, they might not, they might have
> sort of been working as long as electric-pair-mode isn't enabled.  Who
> knows?  They're currently in a sort of race condition.

If they aren't working, where are the bug reports about that?  We only
have bug reports about CC mode so far.

> So, yes, you're basically right.  We should move the call to p-s-i-h not
> just to fix the interface to electric-pair-mode and friends, but to
> bring sanity back to Emacs with respect to this matter.

I'm against such changes, as you well know.  With Emacs, "sane" is
mostly defined as the status quo, because Emacs "mostly works".  Any
significant change in such a low-level facility is, therefore,
"insane", IMNSHO, unless the problem is also general.  And we don't
have evidence that the problem is global.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-17 21:45     ` João Távora
@ 2021-09-18  6:08       ` tomas
  2021-09-18  8:44         ` João Távora
  0 siblings, 1 reply; 23+ messages in thread
From: tomas @ 2021-09-18  6:08 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1123 bytes --]

On Fri, Sep 17, 2021 at 10:45:19PM +0100, João Távora wrote:
> Alan Mackenzie <acm@muc.de> writes:
> 
> > Actually, it was just 111, not 293.  Sorry.
> 
> Are you familiar with the GitHub platform? It's averse to the FSF and
> software freedom in some ways, but it also hosts much source code and
> has a moderately useful search tool for code "in the wild".
> 
> Here's a pertinent search "self-insert-command":
> 
>    https://github.com/search?p=6&q=self-insert-command&type=Code
> 
> It lists almost 83 thousand hits in emacs lisp, many in forks of Emacs,

It may well be that those numbers are inflated by the fact that Github
emphasises fork for things one would just do a branch (or just a local
clone which then languishes unproductively).

This emphasis on fork is probably fueled by Github's marketing strategy 
"We haz 329 gazillions repozitoriez!1!!. Which at some point handsomely
paid off.

IOW, I'd say many "forks" in Github have probably never seen a compile,
let alone an install. Those can't produce bug reports.

Watch the denominator in your statistics ;-)

Cheers
 - t

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-18  6:08       ` tomas
@ 2021-09-18  8:44         ` João Távora
  0 siblings, 0 replies; 23+ messages in thread
From: João Távora @ 2021-09-18  8:44 UTC (permalink / raw)
  To: tomas; +Cc: emacs-devel

On Sat, Sep 18, 2021 at 7:09 AM <tomas@tuxteam.de> wrote:
>
> On Fri, Sep 17, 2021 at 10:45:19PM +0100, João Távora wrote:
> > Alan Mackenzie <acm@muc.de> writes:
> >
> > > Actually, it was just 111, not 293.  Sorry.
> >
> > Are you familiar with the GitHub platform? It's averse to the FSF and
> > software freedom in some ways, but it also hosts much source code and
> > has a moderately useful search tool for code "in the wild".
> It may well be that those numbers are inflated by the fact that Github
> emphasises fork for things one would just do a branch (or just a local
> clone which then languishes unproductively).

But you can't be sure of that, and that's part of the point.

> Watch the denominator in your statistics ;-)

This is why I called the tool "moderately useful" ;-)

My point in providing numbers is to point out that there are
more than the occurrences found in Emacs source tree. I'll go
out on a limb and speculate "quite more".  For making that
point, I think those figures are just fine.

João



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-18  5:59     ` Eli Zaretskii
@ 2021-09-18  9:41       ` Alan Mackenzie
  0 siblings, 0 replies; 23+ messages in thread
From: Alan Mackenzie @ 2021-09-18  9:41 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

Hello, Eli.

On Sat, Sep 18, 2021 at 08:59:54 +0300, Eli Zaretskii wrote:
> > Date: Fri, 17 Sep 2021 20:35:50 +0000
> > From: Alan Mackenzie <acm@muc.de>
> > Cc: emacs-devel@gnu.org

> > The point is, these calls are currently undefined.  Pretty much every
> > last one of them, apart from the ones in cc-cmds.el, which have been
> > made defined again.

> > These 111 calls might have been working, they might not, they might have
> > sort of been working as long as electric-pair-mode isn't enabled.  Who
> > knows?  They're currently in a sort of race condition.

> If they aren't working, where are the bug reports about that?

They don't work, at least some of them.  That is evident from examining
the source code and mechanisms involved.  As for bug reports, there are
many thousand open ones which Lars is heroically working through, some
of which don't have obvious causes.

> We only have bug reports about CC mode so far.

The bugs are, however, not in CC Mode and can't be fixed there.  They
can only be worked around, which is what has been done since bug #33794
at the end of 2018.  This workaround is ugly and caused bad feeling at
the time.

> > So, yes, you're basically right.  We should move the call to p-s-i-h not
> > just to fix the interface to electric-pair-mode and friends, but to
> > bring sanity back to Emacs with respect to this matter.

> I'm against such changes, as you well know.

Indeed!  I can only respect that whilst disagreeing strongly with it.
I've never been a fan of "it mostly works, so don't touch it!".

> With Emacs, "sane" is mostly defined as the status quo, because Emacs
> "mostly works".  Any significant change in such a low-level facility
> is, therefore, "insane", IMNSHO, unless the problem is also general.

The problem is indeed general, in the sense that self-insert-function is
general.  The effects of the problem have only been felt in the
electric-... minor modes so far.

> And we don't have evidence that the problem is global.

We have a complete understanding of how self-insert-function is broken.
This has had damaging effects in the interface between
electric-pair-mode and CC Mode for which workarounds were installed in
CC Mode.

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-18  5:50 ` Eli Zaretskii
@ 2021-09-18  9:57   ` Alan Mackenzie
  2021-09-18 11:04     ` Eli Zaretskii
  0 siblings, 1 reply; 23+ messages in thread
From: Alan Mackenzie @ 2021-09-18  9:57 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: joaotavora, emacs-devel

Hello, Eli.

On Sat, Sep 18, 2021 at 08:50:26 +0300, Eli Zaretskii wrote:
> > Date: Fri, 17 Sep 2021 19:37:27 +0000
> > From: Alan Mackenzie <acm@muc.de>
> > Cc: João Távora <joaotavora@gmail.com>

> > Given that it is now (at least politically) impossible to ban buffer
> > changing post-self-insert-hook functions, I propose to change the time at
> > which the hook gets called.

> > Instead of getting called straight after the self-insert-command, it
> > should be called at the end of the command which called
> > self-insert-command.  Just before post-command-hook, perhaps.  Yes there
> > are details to be worked out.

> > This will make no difference to the usual self-insert-command call.  It
> > will, however, restore the certainty of processing to Lisp code such as
> > c-electric-brace without having to resort to ugly workarounds.

> If CC Mode has problem with these hooks, it could bind them to nil
> around the call to self-insert-command, couldn't it?

That has indeed been done since early 2019.  It's not nice.  It involves
c-electric-brace knowing that one of the entries in post-self-insert-hook
is electric-pair-post-self-insert-function, and calling it explicitly.
It couples the electric-... minor modes with CC Mode, and blocks out any
other functionality on the hook from CC Mode.

> That'd be much better than making any globally-visible change in
> behavior, for which we cannot possibly know the unintended
> consequences.

The mechanism is currently broken.  Do we stick with this known breakage
for fear of an unknown, not particularly likely one, or do we fix it?

> In any case, please let's not make this change before the emacs-28
> branch is cut, as it can potentially disrupt many places.

Yes.  But surely we have enough time before Emacs 29 for any problems it
might cause to come to light.

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-18  9:57   ` Alan Mackenzie
@ 2021-09-18 11:04     ` Eli Zaretskii
  0 siblings, 0 replies; 23+ messages in thread
From: Eli Zaretskii @ 2021-09-18 11:04 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: joaotavora, emacs-devel

> Date: Sat, 18 Sep 2021 09:57:19 +0000
> Cc: emacs-devel@gnu.org, joaotavora@gmail.com
> From: Alan Mackenzie <acm@muc.de>
> 
> > If CC Mode has problem with these hooks, it could bind them to nil
> > around the call to self-insert-command, couldn't it?
> 
> That has indeed been done since early 2019.  It's not nice.  It involves
> c-electric-brace knowing that one of the entries in post-self-insert-hook
> is electric-pair-post-self-insert-function, and calling it explicitly.
> It couples the electric-... minor modes with CC Mode, and blocks out any
> other functionality on the hook from CC Mode.
> 
> > That'd be much better than making any globally-visible change in
> > behavior, for which we cannot possibly know the unintended
> > consequences.
> 
> The mechanism is currently broken.  Do we stick with this known breakage
> for fear of an unknown, not particularly likely one, or do we fix it?

The former, I hope.

> > In any case, please let's not make this change before the emacs-28
> > branch is cut, as it can potentially disrupt many places.
> 
> Yes.  But surely we have enough time before Emacs 29 for any problems it
> might cause to come to light.

I don't know.  We don't even have any clear idea of what problems it
causes in practice, only some vague fears of such problems.



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-17 20:53   ` Alan Mackenzie
  2021-09-17 21:45     ` João Távora
@ 2021-09-18 14:15     ` Stefan Monnier
  2021-09-18 15:56       ` Alan Mackenzie
  1 sibling, 1 reply; 23+ messages in thread
From: Stefan Monnier @ 2021-09-18 14:15 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel, João Távora

>> The question here is why those effects are undesirable while the other
>> effects (like auto-fill or abbrev expansion) aren't.
> It's because it's like making a buffer change in an after-change function
> (that is an insertion or a deletion, not just a text-property change).

I still don't see how the changes performed by auto-fill and abbrev
expansions are different in this respect (both of them are internal to
`self-insert-command` rather than being on `post-self-insert-hook`, for
historical reasons).  They aren't just making text-property changes.

> There's no way for the calling function to keep track of what's done.

That's usually the point: the calling function doesn't want to insert
a given char, but instead it wants to faithfully reproduce all the magic
things that happen when you hit the corresponding key.

After all, if the code just wanted to insert a given char, it
should/would have used `insert`, which is both shorter and
more efficient.

> That may be so, but the point is, an indeterminate part of these 111
> calls is currently undefined.

And I'm pretty sure that among those a significant fraction is already
similarly broken/undefined even when `post-self-insert-hook` is nil
because it would also break in the face of some auto-fill or
abbrev expansions.

> The effect of self-insert-function called from Lisp is wholly
> dependent on what happens to be in post-s-i-h.  You might get no
> characters inserted, you might get 1 or 2, you might get many.
> You just can't know at programming time.

Indeed.  If they want/need to know, then why do they call
`self-insert-command` instead of `insert`?
Until we know that, we can't know what's the better fix.

> However, if the call to post-self-insert-hook were to be postponed to the
> end of the function, all the 111 Lisp calls would be defined again, and
> they would do the same as they did before post-s-i-h came along.

[ I assume by "end of the function" you meant "after the command" such as
  via `post-command-hook`.  ]

It would introduce its own lot of regressions, of course.

> I actually disagree with this (or I'm lacking some knowledge).  With M-:
> post-self-insert-function<CR> you can see what's in the hook, and with a
> little bit of delq, and so on, can change it for testing purposes.  I
> don't think you can do any of that with an add-function type structure.
> Please tell me if I'm wrong, here.  Thanks!

Not wrong, no.  `M-:` indeed currently gives you the raw unreadable
bytecode, but if you do `C-h o foo-function` or if you use
`foo-function` in `M-x ielm`, you'll get something like:

    ELISP> (defvar foo-function #'ignore)
    foo-function
    ELISP> (add-function :around foo-function #'fun1)
    #f(advice-wrapper :around ignore fun1)
    
    ELISP> foo-function
    #f(advice-wrapper :around ignore fun1)
    
    ELISP> 

It's more verbose than the values we have on hooks, admittedly, but it's
somewhat readable.  This "passably readable" form is displayed whenever
the value is printed by `cl-print`.


        Stefan




^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-18 14:15     ` Stefan Monnier
@ 2021-09-18 15:56       ` Alan Mackenzie
  2021-09-18 18:03         ` Stefan Monnier
       [not found]         ` <CALDnm52z_8HyqdC92nrMgzOMOOq48h2MQ4pjbROBOsdm5N_cJg@mail.gmail.com>
  0 siblings, 2 replies; 23+ messages in thread
From: Alan Mackenzie @ 2021-09-18 15:56 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Hello, Stefan.

On Sat, Sep 18, 2021 at 10:15:02 -0400, Stefan Monnier wrote:
> >> The question here is why those effects are undesirable while the other
> >> effects (like auto-fill or abbrev expansion) aren't.
> > It's because it's like making a buffer change in an after-change function
> > (that is an insertion or a deletion, not just a text-property change).

> I still don't see how the changes performed by auto-fill and abbrev
> expansions are different in this respect (both of them are internal to
> `self-insert-command` rather than being on `post-self-insert-hook`, for
> historical reasons).  They aren't just making text-property changes.

They're defined.  The caller of self-insert-function can take account of
them.  Also only things like SPACE or LFD trigger these functionalities.

> > There's no way for the calling function to keep track of what's done.

> That's usually the point: the calling function doesn't want to insert
> a given char, but instead it wants to faithfully reproduce all the magic
> things that happen when you hit the corresponding key.

> After all, if the code just wanted to insert a given char, it
> should/would have used `insert`, which is both shorter and
> more efficient.

OK.  We're back at the point of speculating what all the
self-insert-commands are there for.  `insert' isn't actually fewer
characters to type, because one hast to extract the keypress from
this-command-keys, but I take the point.

> > That may be so, but the point is, an indeterminate part of these 111
> > calls is currently undefined.

> And I'm pretty sure that among those a significant fraction is already
> similarly broken/undefined even when `post-self-insert-hook` is nil
> because it would also break in the face of some auto-fill or
> abbrev expansions.

Maybe.

> > The effect of self-insert-function called from Lisp is wholly
> > dependent on what happens to be in post-s-i-h.  You might get no
> > characters inserted, you might get 1 or 2, you might get many.
> > You just can't know at programming time.

> Indeed.  If they want/need to know, then why do they call
> `self-insert-command` instead of `insert`?
> Until we know that, we can't know what's the better fix.

I suspect it's for commands which do something extra as well as
self-insert-function.  The c-electric-... commands fall into this
category.  Maybe the thinking is compatibility with self-i-c.

> > However, if the call to post-self-insert-hook were to be postponed to the
> > end of the function, all the 111 Lisp calls would be defined again, and
> > they would do the same as they did before post-s-i-h came along.

> [ I assume by "end of the function" you meant "after the command" such as
>   via `post-command-hook`.  ]

Sorry, yes, that's exactly what I meant.

> It would introduce its own lot of regressions, of course.

It might, I'm not convinced either way.

Right now, commands like c-electric-brace get by by binding
post-self-insert-hook to nil (thus getting predictability) then
explicitly calling electric-pair-post-self-insert-function a bit later.
This isn't good, since e-p-p-s-i-function is really an internal function
in elec-pair.el, without any guaranteed functionality.  I really need a
defined external function in elec-pair.el which would do the same thing
as e-p-p-s-i-function, but in addition return information about what
it's just done.  I've asked João about such an interface over the last
few years, now and then, but such has not yet been forthcoming.

> > I actually disagree with this (or I'm lacking some knowledge).  With M-:
> > post-self-insert-function<CR> you can see what's in the hook, and with a
> > little bit of delq, and so on, can change it for testing purposes.  I
> > don't think you can do any of that with an add-function type structure.
> > Please tell me if I'm wrong, here.  Thanks!

> Not wrong, no.  `M-:` indeed currently gives you the raw unreadable
> bytecode, but if you do `C-h o foo-function` or if you use
> `foo-function` in `M-x ielm`, you'll get something like:

>     ELISP> (defvar foo-function #'ignore)
>     foo-function
>     ELISP> (add-function :around foo-function #'fun1)
>     #f(advice-wrapper :around ignore fun1)
    
>     ELISP> foo-function
>     #f(advice-wrapper :around ignore fun1)
    
>     ELISP> 

> It's more verbose than the values we have on hooks, admittedly, but it's
> somewhat readable.  This "passably readable" form is displayed whenever
> the value is printed by `cl-print`.

Thanks.

>         Stefan

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-18 15:56       ` Alan Mackenzie
@ 2021-09-18 18:03         ` Stefan Monnier
       [not found]         ` <CALDnm52z_8HyqdC92nrMgzOMOOq48h2MQ4pjbROBOsdm5N_cJg@mail.gmail.com>
  1 sibling, 0 replies; 23+ messages in thread
From: Stefan Monnier @ 2021-09-18 18:03 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel

> They're defined.  The caller of self-insert-function can take account of
> them.  Also only things like SPACE or LFD trigger these functionalities.

abbrev expansion can take place for other keys than SPC and auto-fill
can happen for any char in `auto-fill-char`, so it's not limited to SPC
and LFD: it can happen virtually with any key, depending on the
user's config.

Indeed, in practice it tends to happen only for a few keys like SPC, but
if a code doesn't want `post-self-insert-hook` modifications, and it
presumes that auto-fill or abbrev expansion won't happen, then we're
back at the question about why does it call `self-insert-command` rather
than `insert`.

>> After all, if the code just wanted to insert a given char, it
>> should/would have used `insert`, which is both shorter and
>> more efficient.
> OK.  We're back at the point of speculating what all the
> self-insert-commands are there for.  `insert' isn't actually fewer
> characters to type, because one hast to extract the keypress from
> this-command-keys, but I take the point.

In my experience, there isn't a general solution to this problem (and
yes, I agree it's a problem; what I disagree with is the
characterization that it's specifically linked to
`post-self-insert-hook`).  We need to fix it on a case by case basis,
and I think it's OK to do that lazily by only fixing the problems when
we encounter them.

>> > The effect of self-insert-function called from Lisp is wholly
>> > dependent on what happens to be in post-s-i-h.  You might get no
>> > characters inserted, you might get 1 or 2, you might get many.
>> > You just can't know at programming time.
>
>> Indeed.  If they want/need to know, then why do they call
>> `self-insert-command` instead of `insert`?
>> Until we know that, we can't know what's the better fix.
>
> I suspect it's for commands which do something extra as well as
> self-insert-function.  The c-electric-... commands fall into this
> category.  Maybe the thinking is compatibility with self-i-c.

It's difficult to combine several extra behaviors in
`self-insert-command` in a modular way.  For that reason
`electric-indent-mode`, `electric-pair-mode`, and `electric-layout-mode`
know about each other to some extent (tho I strove to design them such
that they are independent).

For that same reason, `c-electric-*` needs to know about those others as
well :-(, tho it also has the option of just breaking them by using
plain `insert`.

>> It would introduce its own lot of regressions, of course.
> It might, I'm not convinced either way.

I can see a few "obvious" interactions with other post-command-hooks,
and based on the history of the subtle issues we've had with interactions
between `electric-*-mode`s I'm pretty sure it would take a few
iterations before getting something that works as well as what we have.

And of course, the effects that are currently undesired may still
be undesired when postponed to `post-command-hook`.

I think postponing to `post-command-hook` will just make the behavior
yet more complex and yet harder to control (e.g. you won't have the easy
option of let-binding `electric-*-mode` around the call to
`self-insert-command`).

> Right now, commands like c-electric-brace get by by binding
> post-self-insert-hook to nil (thus getting predictability) then
> explicitly calling electric-pair-post-self-insert-function a bit later.
> This isn't good, since e-p-p-s-i-function is really an internal function
> in elec-pair.el, without any guaranteed functionality.  I really need a
> defined external function in elec-pair.el which would do the same thing
> as e-p-p-s-i-function, but in addition return information about what
> it's just done.  I've asked João about such an interface over the last
> few years, now and then, but such has not yet been forthcoming.

Of course, IMO (and I believe João has the same position) the better
path forward is to drop that `c-electric-brace` code altogether and rely
on `electric-pair-mode` instead like all other modes do, so the need for
such extra API is definitely not very high in my list of priorities ;-)


        Stefan




^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
       [not found]         ` <CALDnm52z_8HyqdC92nrMgzOMOOq48h2MQ4pjbROBOsdm5N_cJg@mail.gmail.com>
@ 2021-09-18 22:55           ` João Távora
  2021-09-19 12:14             ` Alan Mackenzie
  0 siblings, 1 reply; 23+ messages in thread
From: João Távora @ 2021-09-18 22:55 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Stefan Monnier, emacs-devel

João Távora <joaotavora@gmail.com> writes:

> it's just done.  I've asked João about such an interface over the last
> few years, now and then, but such has not yet been forthcoming.

I've made my opinion clear now and then, over the years.  But here I go
again:

'electric-pair-post-self-insert-function' (aka e-p-p-s-i-f) existed
before I have laid my programmer eyes on it.  It's not an internal
function, it has a defined protocol and exists to be a member of
'post-self-insert-hook'.  Its purpose is -- and has always been -- to
insert aditional delimiters related to the one just typed or,
alternatively, to delete the character just inserted when it happens to
skip a closing delimiter.  In Emacs, as you know, a delimiter is a well
defined thing, thanks to syntax tables.  e-p-m's functionality, known
sometimes as auto-pairing, is implemented in numerous editors.  I first
saw it in TextMate around 2008.  In Emacs, apart from e-p-m, extensions
such as autopair, smartparens, paredit (and probably others) do the
same.

The only significant thing I did in e-p-m -- besides a boring code
refactor coordinated with then-maintainer Stefan -- was add the ability
to choose which action to take based on the information conveyed by
syntax-ppss, so that a degree of delimiter balance is maintained.  As
you known, syntax-ppss, relies again on that fundamental Emacs
abstraction -- the syntax-table -- that buffers have.  This works very
well in practice and is a testament to how useful simple syntax tables
are.

Nevertheless, if you want to extract things from e-p-p-s-i-f and use
them in your function, you can refactor its innards.  As long as you
don't break anything (fortunately there are good tests) or convolute
elec-pair.el's code beyond recognition.  Don't expect me to spend my
time any time in this effort: I won't.  I think it would be a very gross
waste of time.  _My_ time, at least.  You may convince someone else of
that idea.

My alternative suggestion, which I've offered now and then, over the
years, is for you to study how cc-mode behaves when you bind the
delimiter keys simply to 'self-insert-command' and refrain from
re-inventing 'electric-pair-mode' inside cc-mode.  I do this in my
.emacs, and I see that other users have settled on the same practice.
If you were to try that, you could theoretically arrive at the
conclusion that it is possible to do everything cc-mode does today
w.r.t. electricity via the existing interfaces of 'electric-pair-mode',
'electric-layout-mode' and 'electric-indent-mode'.

I must be honest.  I don't really expect you arrive at that conclusion
or even try that experiment.  That's OK, I can't force anyone to reason
the way I do.  My personal hopes for C/C++/Java editing in Emacs are a
completely new major mode where syntax is handled by TreeSitter and all
the keys are bound to 'self-insert-command'.  I'd bet good money that
'electric-pair-mode' is going to work there fine and with 0
configuration, like it does in all other major modes.

With best regards,
João



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-18 22:55           ` João Távora
@ 2021-09-19 12:14             ` Alan Mackenzie
  2021-09-19 12:36               ` João Távora
  2021-09-19 12:59               ` Stefan Monnier
  0 siblings, 2 replies; 23+ messages in thread
From: Alan Mackenzie @ 2021-09-19 12:14 UTC (permalink / raw)
  To: João Távora; +Cc: Stefan Monnier, emacs-devel

Hello, João

On Sat, Sep 18, 2021 at 23:55:10 +0100, João Távora wrote:
> João Távora <joaotavora@gmail.com> writes:

> > it's just done.  I've asked João about such an interface over the last
> > few years, now and then, but such has not yet been forthcoming.

> I've made my opinion clear now and then, over the years.  But here I go
> again:

> 'electric-pair-post-self-insert-function' (aka e-p-p-s-i-f) existed
> before I have laid my programmer eyes on it.  It's not an internal
> function, it has a defined protocol ....

It doesn't even have a doc string.

> .... and exists to be a member of 'post-self-insert-hook'.

Exactly.  There is a need for a stable functional interface to
electric-pair-mode which CC Mode can use.  Despite how little effort it
would be to create and formalise this, you have refused to do so over
the years.

> Its purpose is -- and has always been -- to insert aditional
> delimiters related to the one just typed or, alternatively, to delete
> the character just inserted when it happens to skip a closing
> delimiter.

Yes.  Would you please write this into a doc string for
electric-pair-post-self-insert-function, together with information about
where that function gets its information from, and what it does with
point.

[ .... ]

> Nevertheless, if you want to extract things from e-p-p-s-i-f and use
> them in your function, you can refactor its innards.  As long as you
> don't break anything (fortunately there are good tests) or convolute
> elec-pair.el's code beyond recognition.  Don't expect me to spend my
> time any time in this effort: I won't.  I think it would be a very gross
> waste of time.  _My_ time, at least.  You may convince someone else of
> that idea.

What a wonderful attitude for a maintainer.  ;-(

You will perhaps recall bug #33794 "26.1; electric-pair-mode breaks
auto-newline minor mode of cc-mode".  Despite a large part of the
problem lying within electric-pair-mode, I don't think you changed a
single line of your code to fix the problem.  As a result, I was forced
to implement ugly workarounds, which are still there almost three years
later, the alternative being leaving the bug unfixed.

> My alternative suggestion, which I've offered now and then, over the
> years, is for you to study how cc-mode behaves when you bind the
> delimiter keys simply to 'self-insert-command' ....

You know full well that this is problematic.

> and refrain from re-inventing 'electric-pair-mode' inside cc-mode.

I sometimes wonder if such a reimplementation inside CC Mode might have
been less work than all the email exchange with you trying to get you to
fix things.

> I do this in my .emacs, and I see that other users have settled on the
> same practice.  If you were to try that, you could theoretically
> arrive at the conclusion that it is possible to do everything cc-mode
> does today w.r.t. electricity via the existing interfaces of
> 'electric-pair-mode', 'electric-layout-mode' and
> 'electric-indent-mode'.

Sure, anything's possible.  But doing so whilst retaining functionality
would fragment the code, and lead inevitably to bugs in what is
currently an exceptionally stable part of CC Mode.

> I must be honest.  I don't really expect you arrive at that conclusion
> or even try that experiment.

No.  I have a user base to consider.

> That's OK, I can't force anyone to reason the way I do.  My personal
> hopes for C/C++/Java editing in Emacs are a completely new major mode
> where syntax is handled by TreeSitter and all the keys are bound to
> 'self-insert-command'.  I'd bet good money that 'electric-pair-mode'
> is going to work there fine and with 0 configuration, like it does in
> all other major modes.

> With best regards,
> João

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-19 12:14             ` Alan Mackenzie
@ 2021-09-19 12:36               ` João Távora
  2021-09-19 12:59               ` Stefan Monnier
  1 sibling, 0 replies; 23+ messages in thread
From: João Távora @ 2021-09-19 12:36 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Stefan Monnier, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 435 bytes --]

On Sun, Sep 19, 2021, 13:14 Alan Mackenzie <acm@muc.de> wrote:

> > I must be honest.  I don't really expect you arrive at that conclusion
> > or even try that experiment.
>
> No.  I have a user base to consider.
>

In fact, I shouldn't even have expected you to read what I wrote, otherwise
you
wouldn't have replied with such a bizarre conclusion. I'll write a
docstring for e-p-p-s-i-f.

Best regards,
João



>

[-- Attachment #2: Type: text/html, Size: 1063 bytes --]

^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-19 12:14             ` Alan Mackenzie
  2021-09-19 12:36               ` João Távora
@ 2021-09-19 12:59               ` Stefan Monnier
  2021-09-19 14:57                 ` Alan Mackenzie
  1 sibling, 1 reply; 23+ messages in thread
From: Stefan Monnier @ 2021-09-19 12:59 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: João Távora, emacs-devel

>> My alternative suggestion, which I've offered now and then, over the
>> years, is for you to study how cc-mode behaves when you bind the
>> delimiter keys simply to 'self-insert-command' ....
>
> You know full well that this is problematic.

I can't speak for João, but no I don't.

>> and refrain from re-inventing 'electric-pair-mode' inside cc-mode.
> I sometimes wonder if such a reimplementation inside CC Mode might have

I don't understand the "might".  You do have such a "reimplementation"
(and you even implemented it before `electric-*-mode`).

The difficulty you're facing is due to the face that contrary to all
other major modes which used to have such features, you decided to keep
your implementation and try to make it interact correctly with
`electric-*-mode`s.  There's no doubt that this is hard.  I do doubt
whether it's useful, OTOH.

I understand your desire to preserve exactly the featureset you designed
for CC-mode, rather than rely on the `electric-*-mode`s features which
aren't exactly equivalent and aren't configured in the same way.
So you gave more importance to preserving compatibility with older
Emacs/CC-mode, whereas I give more importance to harmonization of
configuration and behavior across major modes.

> been less work than all the email exchange with you trying to get you to
> fix things.

There is a simpler solution at hand.  You say it's "problematic", but
all solutions have their downsides.

>> I must be honest.  I don't really expect you arrive at that conclusion
>> or even try that experiment.
> No.  I have a user base to consider.

Some of your user base would appreciate not having to do things
differently in CC-modes than in other modes.


        Stefan




^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-19 12:59               ` Stefan Monnier
@ 2021-09-19 14:57                 ` Alan Mackenzie
  2021-09-19 20:20                   ` Stefan Monnier
  0 siblings, 1 reply; 23+ messages in thread
From: Alan Mackenzie @ 2021-09-19 14:57 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: João Távora, emacs-devel

Hello, Stefan.

On Sun, Sep 19, 2021 at 08:59:59 -0400, Stefan Monnier wrote:
> >> My alternative suggestion, which I've offered now and then, over the
> >> years, is for you to study how cc-mode behaves when you bind the
> >> delimiter keys simply to 'self-insert-command' ....

> > You know full well that this is problematic.

> I can't speak for João, but no I don't.

OK, I'm telling you now it is problematic.

> >> and refrain from re-inventing 'electric-pair-mode' inside cc-mode.
> > I sometimes wonder if such a reimplementation inside CC Mode might have

> I don't understand the "might".  You do have such a "reimplementation"
> (and you even implemented it before `electric-*-mode`).

And we're now reduced to silly discussions about the precise meanings of
words.  There is no implementation of the electric pair mode
functionality in CC Mode.  There is a call to an unofficial function in
elec-pair.el which currently happens to work.  There is no better
interface available, and João seems determined that there won't be one.

> The difficulty you're facing is due to the face that contrary to all
> other major modes which used to have such features, ....

There were no other such modes.  Or were there?  Which modes at the time
had electric indentation, or auto newline?

> .... you decided to keep your implementation and try to make it
> interact correctly with `electric-*-mode`s.

More precisely, the difficulties were caused by electric-*-mode being
developed in such a way as to be incompatible with existing major modes,
in particular CC Mode modes.  Perhaps you might like to say something
about why you did this.  It is (at least in hindsight) obvious there
would be incompatibilities with CC Mode.

I don't recall there being any discussion on emacs-devel at the time
these electric-*-modes were being planned.  If there had been, the
friction which has happened since might well have been avoided.

So, why did you design these new modes in such an incompatible fashion?

It's perhaps worthwhile to come back to a main incompatibility
introduced, and that is the original topic of this thread,
post-self-insert-hook.  This broke self-insert-function, at least as
used in CC Mode.  This is what has forced the ugly workarounds on CC
Mode.  Again, the question why?

[ .... ]

> I understand your desire to preserve exactly the featureset you designed
> for CC-mode, ....

More the features introduced by Barry Warsaw, Martin Stjernholm and
their predecessors.  They're good features, not obsolete, and change for
change's sake is never something I've been keen on.

> .... rather than rely on the `electric-*-mode`s features which aren't
> exactly equivalent and aren't configured in the same way.

They're worse features, from CC Mode's point of view.  They're more
complicated, more fragmented (you yourself admitted to cross coupling
between the mechanisms of the different electric-*-modes), more
difficult to debug, and so on.  All this compared with a collection of
straightforwardly written commands, c-electric-brace and friends, which
just work, and have done for several decades, and would be exceptionally
easy to debug if that were ever needed.

> So you gave more importance to preserving compatibility with older
> Emacs/CC-mode, whereas I give more importance to harmonization of
> configuration and behavior across major modes.

If you really wanted such harmonization, why did you create these modes
with such gross incompatibilities with CC Mode?  Why didn't you discuss
these things with me or Martin Stjernholm first, so that we could have
developed things co-operatively rather than you going your own way and
trying to force the result on CC Mode?

> > been less work than all the email exchange with you trying to get
> > you to fix things.

> There is a simpler solution at hand.  You say it's "problematic", but
> all solutions have their downsides.

It's problematic, and anything but simple.

> >> I must be honest.  I don't really expect you arrive at that conclusion
> >> or even try that experiment.
> > No.  I have a user base to consider.

> Some of your user base would appreciate not having to do things
> differently in CC-modes than in other modes.

That's pure speculation.  Also speculation: CC Mode users appreciate not
having to report bugs for c-electric-brace.

>         Stefan

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 23+ messages in thread

* Re: Fixing post-self-insert-hook.
  2021-09-19 14:57                 ` Alan Mackenzie
@ 2021-09-19 20:20                   ` Stefan Monnier
  0 siblings, 0 replies; 23+ messages in thread
From: Stefan Monnier @ 2021-09-19 20:20 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: João Távora, emacs-devel

>> Some of your user base would appreciate not having to do things
>> differently in CC-modes than in other modes.
> That's pure speculation.

Definitely not.  I have no idea how important that part of the user base
is, but it is a fact that it is not the empty set.


        Stefan




^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2021-09-19 20:20 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-09-17 19:37 Fixing post-self-insert-hook Alan Mackenzie
2021-09-17 20:04 ` Stefan Monnier
2021-09-17 20:53   ` Alan Mackenzie
2021-09-17 21:45     ` João Távora
2021-09-18  6:08       ` tomas
2021-09-18  8:44         ` João Távora
2021-09-18 14:15     ` Stefan Monnier
2021-09-18 15:56       ` Alan Mackenzie
2021-09-18 18:03         ` Stefan Monnier
     [not found]         ` <CALDnm52z_8HyqdC92nrMgzOMOOq48h2MQ4pjbROBOsdm5N_cJg@mail.gmail.com>
2021-09-18 22:55           ` João Távora
2021-09-19 12:14             ` Alan Mackenzie
2021-09-19 12:36               ` João Távora
2021-09-19 12:59               ` Stefan Monnier
2021-09-19 14:57                 ` Alan Mackenzie
2021-09-19 20:20                   ` Stefan Monnier
2021-09-17 20:15 ` João Távora
2021-09-17 20:35   ` Alan Mackenzie
2021-09-17 20:48     ` João Távora
2021-09-18  5:59     ` Eli Zaretskii
2021-09-18  9:41       ` Alan Mackenzie
2021-09-18  5:50 ` Eli Zaretskii
2021-09-18  9:57   ` Alan Mackenzie
2021-09-18 11:04     ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).