emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Fixing post-self-insert-hook.


From: Alan Mackenzie
Subject: Re: Fixing post-self-insert-hook.
Date: Fri, 17 Sep 2021 20:53:42 +0000

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).



reply via email to

[Prev in Thread] Current Thread [Next in Thread]