emacs-devel
[Top][All Lists]
Advanced

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

Re: treesit indentation "blinking"


From: Eli Zaretskii
Subject: Re: treesit indentation "blinking"
Date: Thu, 30 Mar 2023 17:00:42 +0300

> From: João Távora <joaotavora@gmail.com>
> Cc: dgutov@yandex.ru,  dancol@dancol.org,  casouri@gmail.com,
>   emacs-devel@gnu.org,  theo@thornhill.no, geza.herman@gmail.com
> Date: Thu, 30 Mar 2023 12:05:35 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > What _is_ unfriendly is to refuse to install a change that you
> > yourself consider required, when asked to do that conditionally, so
> > users who still want the electricity, even though it "blinks", could
> > still have it.  I think the request is reasonable, especially since
> > you don't use this mode, and so can easily overlook some useful
> > behavior that your proposed change could disable or break.
> 
> You don't need me to install changes, do you?

Yes, I do.  If I had to install all the changes myself, Emacs could
never be moving forward as fast is it does today, and wouldn't be what
we see now.

This is a community project; without active collaboration of all the
contributors it wouldn't be such a success.  It should go without
saying that when someone proposes a change and the discussion then
concludes the change needs small adaptations, the person who proposed
the change will then go ahead and install those small adaptations.
Without such minimal collaboration, we as a project will get nowhere.

> >> I didn't realize that, because I use c++-mode with its electric features
> >> off.
> >
> > If you turn electric features off, then electric-indent-chars will
> > have no effect whatsoever, and all this discussion is moot.
> 
> No.  I use c++ mode with its bindings like c-electric-paren deactivated.
> I still use electric-indent-mode with its very reasonable default value
> for of (?\n)

I suspect that this is the root cause why you find c++-ts-mode so
jarring: since you disable all the electric behavior in C++ mode
except the one bound to newline, you are not used to electric
reindentation, except when you type RET.  But that is not the default.
I do use the default settings of all the CC Mode electric characters
(with very few minor customizations), and so I do see the electric
reindentation in c++-mode all the time, and am used to it.  If most
users don't disable the default electric behavior in CC Mode, they
will not see c++-ts-mode behavior as "jarring".

The difference between c++-mode and c++-ts-mode is that the latter
doesn't (yet) let you customize each electric character separately.
This could be a subject of future extensions, but for now, as Dmitry
points out, it is easy to override the value of electric-indent-chars
in a mode hook, and leave only the newline in it -- this should give
you a better approximation to what you are used to in c++-mode, I
think.

> So far I don't think anyone here has said they _like_ the bouncing.

It depends on how much it does that.  What I saw until now is not
different from what I see in CC mode with the default electric
behavior, in which case I'm okay with that.

> But maybe someone does..  I wasn't even the first to report this.
> Daniel did in this list and Geza Herman did in #61412.

Maybe Daniel also disables the electric behavior of CC mode?  In any
case, customizing electric-indent-chars could solve Daniel's problems
as well.

> >>    emacs -Q `mktemp`.cpp -f c++-ts-mode  
> >> 
> >>    i n t SPC m a i n ( ) { RET for ( ; ; ) SPC b l a ( ) ;  
> >> 
> >> Can you reproduce this bouncing?
> >
> > No, I cannot.  All I see is that the semi-colon after "foo()" indents
> > the line, just once, so that it has the correct indentation
> > (previously it had no indentation at all).
> 
> We have different ideas of bouncing.

No, I don't think so.  We just perceive it differently.  Also, I think
your description said that each semi-colon inside "for" causes
reindentation, and I don't see that

> >> Now try the same with c++-mode. Do you confirm that it doesn't
> >> bounce?
> >
> > The only difference I see is that c++-mode indents the line with "for"
> > right from the start, after I type RET.  Which is better indeed, but
> > what c++-ts-mode does is not a catastrophe, either.
> 
> Never said it's a "catastrophe".  Just annoying/jarring/suprising
> behaviour that you don't get with vanilla c++-mode or modes based on
> cc-mode.  I think that electric-indent-chars was designed with those
> modes in mind.

Didn't we just establish that you modify the vanilla behavior of
c++-mode by disabling the electric behavior of all the characters
except the newline?  If so, users who don't disable will not see the
electric reindentation as jarring.

> I'm using the latest master (560c27a3) and starting it with 
> 
> src/emacs -Q `mktemp`.cpp -f c++-ts-mode
> 
> > Also, which version of the tree-sitter C++ grammar library do you have
> > installed?
> 
> I don't know how to answer that.  I used M-x
> treesit-install-language-grammar RET "cpp" and accepted the default in
> all prompts.  I presume it installs the latest version of the Git repo.
> I've just reinstalled today.

Then I don't know why we don't see the same behavior.  Beats me.

> You can _see_ in the GIF what I type.  I've just using normal keys for
> self-insert.  Then C-p, and some C-f to position my cursor before the
> ';;', then C-d to delete the two ';;'. And then add them back again with
> two ';;'.  After the first ';' the line goes back, then the second one,
> and the line goes forward ';'.

Similar things happen with CC mode.  Perhaps not in this particular
situation, but in others.

> Also see the original recipe of bug#62142, which is quite easy to
> follow, for more bouncing.  Can't you reproduce this either?

I'm confused by the description there, and we just discovered that you
said there to disable electric-indent-mode when you really meant
electric-pair-mode.  So maybe post a revised example there (or here),
this time without any mistakes, and let's take it from there.



reply via email to

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