unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* My usage of imenu is broken.
@ 2024-05-28 10:53 Alan Mackenzie
  2024-05-28 11:34 ` Eli Zaretskii
  0 siblings, 1 reply; 41+ messages in thread
From: Alan Mackenzie @ 2024-05-28 10:53 UTC (permalink / raw)
  To: emacs-devel

Hello, Emacs.

imenu no longer works for me.  The imenu page in the Emacs manual says

    the command [imenu] always displays the whole list of valid names.  

This is not true.  When I type C-c i (my binding for imenu) I see no
such list.  When I additionally type TAB I still see no such list.  All
I see is *Rescan*, Function, and Variable.  I think the manual should be
fixed.

The manual talks about "flatten"ing without explaining what this means.
The NEWS item doesn't explain it either.  I think this should be fixed.

On typing C-c i, I used to be able to type the first characters of a
function name and complete it with TAB in the minibuffer.  This no
longer works.  It doesn't work even if I set imenu-flatten to t.
Instead I've got to type boilerplate first.  This is unacceptable to me.

How do I get the old behaviour back, please?  Why doesn't the NEWS item
say how to get back the old behaviour?

What happened to Emacs's convention that new facilities are disabled by
default to begin with, and only made the default after positive
experience with their use?

-- 
Alan Mackenzie (Nuremberg, Germany).



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

* Re: My usage of imenu is broken.
  2024-05-28 10:53 My usage of imenu is broken Alan Mackenzie
@ 2024-05-28 11:34 ` Eli Zaretskii
  2024-05-28 13:57   ` Alan Mackenzie
  0 siblings, 1 reply; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-28 11:34 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel

> Date: Tue, 28 May 2024 10:53:18 +0000
> From: Alan Mackenzie <acm@muc.de>
> 
> Hello, Emacs.
> 
> imenu no longer works for me.  The imenu page in the Emacs manual says
> 
>     the command [imenu] always displays the whole list of valid names.  
> 
> This is not true.  When I type C-c i (my binding for imenu) I see no
> such list.

AFAIK, this never worked literally as the manual says.  I went as far
back as Emacs 23, and I don't see it.

> When I additionally type TAB I still see no such list.

I do see the list after TAB.  So I guess the devil is in the details
(which file you were visiting, under what major mode, etc.) -- details
you haven't provided...

> All I see is *Rescan*, Function, and Variable.  I think the manual
> should be fixed.

Let's first understand why it doesn't work for you as it does for me.

> The manual talks about "flatten"ing without explaining what this means.
> The NEWS item doesn't explain it either.  I think this should be fixed.

Sadly, it is quite pointless to complain about deficiencies of
documentation in most cases, because no one which is in the position
to fix that is listening or can be bothered!

My advice is to invest the time, study the code (which will most
probably allow you to find ways of getting the behavior you want or
find and fix the bugs which prevent that), and fix the documentation
as required.  This way, everyone wins, starting from you!

And I did just that in this case: loaded 'imenu' and tried your
recipes.  Lo and behold, it does work for me, at least when I visit
src/dispnew.c from our tree (the first file I thought about, nothing
special about it).

> On typing C-c i, I used to be able to type the first characters of a
> function name and complete it with TAB in the minibuffer.  This no
> longer works.

It does for me.

> It doesn't work even if I set imenu-flatten to t.  Instead I've got
> to type boilerplate first.  This is unacceptable to me.
> 
> How do I get the old behaviour back, please?  Why doesn't the NEWS item
> say how to get back the old behaviour?

Old behavior in what Emacs version, please?  (In fact, you don't even
say in which version the above misbehavior happened to you, which I
find unexpected from you.)

> What happened to Emacs's convention that new facilities are disabled by
> default to begin with, and only made the default after positive
> experience with their use?

Nothing happened (except bugs, here and there).



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

* Re: My usage of imenu is broken.
  2024-05-28 11:34 ` Eli Zaretskii
@ 2024-05-28 13:57   ` Alan Mackenzie
  2024-05-28 18:29     ` Eli Zaretskii
  2024-05-28 21:55     ` Stefan Monnier
  0 siblings, 2 replies; 41+ messages in thread
From: Alan Mackenzie @ 2024-05-28 13:57 UTC (permalink / raw)
  To: Eli Zaretskii, Stefan Monnier; +Cc: emacs-devel

Hello, Eli.

On Tue, May 28, 2024 at 14:34:21 +0300, Eli Zaretskii wrote:
> > Date: Tue, 28 May 2024 10:53:18 +0000
> > From: Alan Mackenzie <acm@muc.de>

> > Hello, Emacs.

> > imenu no longer works for me.  The imenu page in the Emacs manual says

> >     the command [imenu] always displays the whole list of valid names.  

> > This is not true.  When I type C-c i (my binding for imenu) I see no
> > such list.

> AFAIK, this never worked literally as the manual says.  I went as far
> back as Emacs 23, and I don't see it.

> > When I additionally type TAB I still see no such list.

> I do see the list after TAB.  So I guess the devil is in the details
> (which file you were visiting, under what major mode, etc.) -- details
> you haven't provided...

> > All I see is *Rescan*, Function, and Variable.  I think the manual
> > should be fixed.

> Let's first understand why it doesn't work for you as it does for me.

I now understand what's happening.  Stefan M committed a patch some while
ago, the effect of which is to force users who've set up their
auto-mode-alist for CC Mode to use c-ts-mode, etc., instead.  It is in a
subroutine of normal-mode where this subterfuge occurs.

Yesterday, I'd reverted src/eval.c (which normally gets loaded via
desktop), and Stefan's patch converted it to c-ts-mode without me being
aware of this.

So my problem was being in c-ts-mode, for which all these things I don't
like about imenu are apparently normal.  It's one more reason for me to
carry on using CC Mode.

I'd wrongly jumped to the conclusion that what I was seeing was due to
recent changes in imenu.el, so apologies to yourself and those who
amended imenu.el.

> > The manual talks about "flatten"ing without explaining what this means.
> > The NEWS item doesn't explain it either.  I think this should be fixed.

> Sadly, it is quite pointless to complain about deficiencies of
> documentation in most cases, because no one which is in the position
> to fix that is listening or can be bothered!

:-(  Yes.  Maybe I should fix it myself.  Substandard documentation was
one of the things which led to the fall of XEmacs.

[ .... ]

> > How do I get the old behaviour back, please?  Why doesn't the NEWS item
> > say how to get back the old behaviour?

> Old behavior in what Emacs version, please?  (In fact, you don't even
> say in which version the above misbehavior happened to you, which I
> find unexpected from you.)

Sorry, I was in master, but not in emacs -Q.

[ .... ]

The bug "fix" and its patch which caused all this trouble were:

Bug#69191 New var `major-mode-remap-defaults`, for packages.

commit 2b5d43081a30f816dd38a16c7b5bfbad712a779b
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Date:   Sun Mar 3 23:08:16 2024 -0500

    (major-mode-remap(-defaults)): New var and function (bug#69191)

I don't understand what major-mode-remap and major-mode-remap-defaults
are for.  They would appear to be duplicating and confusing the mechanism
of auto-mode-alist, and seem unnecessary.  It seems clear they are too
difficult to use.

I would favour reverting that patch, and thus restore the preference of
users for CC Mode.

Stefan, your comments, please.

-- 
Alan Mackenzie (Nuremberg, Germany).



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

* Re: My usage of imenu is broken.
  2024-05-28 13:57   ` Alan Mackenzie
@ 2024-05-28 18:29     ` Eli Zaretskii
  2024-05-28 20:46       ` Alan Mackenzie
  2024-05-29  5:38       ` Yuan Fu
  2024-05-28 21:55     ` Stefan Monnier
  1 sibling, 2 replies; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-28 18:29 UTC (permalink / raw)
  To: Alan Mackenzie, Yuan Fu; +Cc: monnier, emacs-devel

> Date: Tue, 28 May 2024 13:57:46 +0000
> Cc: emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> So my problem was being in c-ts-mode, for which all these things I don't
> like about imenu are apparently normal.  It's one more reason for me to
> carry on using CC Mode.

I just now tried "M-x imenu" in c-ts-mode, and I don't see such a
catastrophe.  True, if you leave imenu-flatten at its default nil
value, you need to choose top-level "kind" of identifiers before you
can type the name.  For C, these "kinds" are Function, Variable, and
Struct.  Once you do select one of them, Imenu prompts you again, and
then you can type the identifiers, with completion, or type TAB to see
all of the names.

This is not very different from what you are used to.

Yuan, why does c-ts-mode' Imenu support behave differently in this
regard from CC Mode?  What was the rationale for the different
behavior?



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

* Re: My usage of imenu is broken.
  2024-05-28 18:29     ` Eli Zaretskii
@ 2024-05-28 20:46       ` Alan Mackenzie
  2024-05-28 21:28         ` Stefan Monnier
  2024-05-29 11:31         ` Eli Zaretskii
  2024-05-29  5:38       ` Yuan Fu
  1 sibling, 2 replies; 41+ messages in thread
From: Alan Mackenzie @ 2024-05-28 20:46 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Yuan Fu, monnier, emacs-devel

Hello, Eli

On Tue, May 28, 2024 at 21:29:43 +0300, Eli Zaretskii wrote:
> > Date: Tue, 28 May 2024 13:57:46 +0000
> > Cc: emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>

> > So my problem was being in c-ts-mode, for which all these things I don't
> > like about imenu are apparently normal.  It's one more reason for me to
> > carry on using CC Mode.

> I just now tried "M-x imenu" in c-ts-mode, and I don't see such a
> catastrophe.  True, if you leave imenu-flatten at its default nil
> value, you need to choose top-level "kind" of identifiers before you
> can type the name.  For C, these "kinds" are Function, Variable, and
> Struct.  Once you do select one of them, Imenu prompts you again, and
> then you can type the identifiers, with completion, or type TAB to see
> all of the names.

> This is not very different from what you are used to.

It's different enough to me to matter.  It adds boilerplate entry to
data entry, and would likely more than double the time to get to the
target function.  I'm not saying here that it's bad, just that it would
be bad for me.

I don't think anything like the CC Mode imenu style is available in the
c-ts-mode etc. modes.

> Yuan, why does c-ts-mode' Imenu support behave differently in this
> regard from CC Mode?  What was the rationale for the different
> behavior?

I'm not Yuan, but it could be a desire to support variables and structs
as well as just functions.

-- 
Alan Mackenzie (Nuremberg, Germany).



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

* Re: My usage of imenu is broken.
  2024-05-28 20:46       ` Alan Mackenzie
@ 2024-05-28 21:28         ` Stefan Monnier
  2024-05-29  6:04           ` Juri Linkov
  2024-05-29 11:31         ` Eli Zaretskii
  1 sibling, 1 reply; 41+ messages in thread
From: Stefan Monnier @ 2024-05-28 21:28 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Eli Zaretskii, Yuan Fu, emacs-devel

> It's different enough to me to matter.  It adds boilerplate entry to
> data entry, and would likely more than double the time to get to the
> target function.  I'm not saying here that it's bad, just that it would
> be bad for me.
>
> I don't think anything like the CC Mode imenu style is available in the
> c-ts-mode etc. modes.

FWIW, I think the problem partly lies on the side of `imenu`.
The API should let major modes provide the info once and for all, and
then the user should be able to choose whether they prefer to see it as
a few steps down a decision tree (e.g. first choose the category then
the identifier) or something else (e.g. completion of strings of the
form "<IDENT> <CATEGORY>", or order-agnostic so you can write
either "<IDENT> <CATEGORY>" or "<CATEGORY> <IDENT>", or ...).


        Stefan




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

* Re: My usage of imenu is broken.
  2024-05-28 13:57   ` Alan Mackenzie
  2024-05-28 18:29     ` Eli Zaretskii
@ 2024-05-28 21:55     ` Stefan Monnier
  2024-05-29 11:16       ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Alan Mackenzie
  1 sibling, 1 reply; 41+ messages in thread
From: Stefan Monnier @ 2024-05-28 21:55 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Eli Zaretskii, emacs-devel

> I now understand what's happening.  Stefan M committed a patch some
> while ago, the effect of which is to force users who've set up their
> auto-mode-alist for CC Mode to use c-ts-mode, etc., instead.

That's one way to see it.  🙂

> Yesterday, I'd reverted src/eval.c (which normally gets loaded via
> desktop), and Stefan's patch converted it to c-ts-mode without me being
> aware of this.

The way I see it, the problem is in `c-ts-mode.el` where merely loading
the file changes the default mode to use for C files to `c-ts-mode`
(tho only in the current session, thank god).
My patch(es) only change(s) the mechanism used for that.

I think this is a misfeature of `c-ts-mode.el`, but this was the result
of a long discussion and I don't think we want to revisit that yet.

> I don't understand what major-mode-remap and major-mode-remap-defaults
> are for.

They are designed to allow specifying which C mode Emacs should use
(not only for C, obviously).

In the past, `auto-mode-alist` way used for that, but that did not
account for cases where the major mode is not specified via the file
name, but instead via `-*- mode -*-`, or via `interpreter-mode-alist`,
or via ...
Also it encouraged `c-ts-mode.el` (and friends) duplicating
the regexps used to specify "this is probably a C file", often doing it
slightly differently from the other major mode.

Instead, conceptually `auto-mode-alist` should now be used to specify
the type of content (tho represented not as something like a MIME type
but as a symbol that (usually) denotes a major mode), and then
`major-mode-remap` is used to decide which major mode to use for that
file type.

> They would appear to be duplicating and confusing the mechanism
> of auto-mode-alist, and seem unnecessary.  It seems clear they are too
> difficult to use.

Clear as mud, indeed.


        Stefan




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

* Re: My usage of imenu is broken.
  2024-05-28 18:29     ` Eli Zaretskii
  2024-05-28 20:46       ` Alan Mackenzie
@ 2024-05-29  5:38       ` Yuan Fu
  1 sibling, 0 replies; 41+ messages in thread
From: Yuan Fu @ 2024-05-29  5:38 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Alan Mackenzie, Stefan Monnier, emacs-devel



> On May 28, 2024, at 11:29 AM, Eli Zaretskii <eliz@gnu.org> wrote:
> 
>> Date: Tue, 28 May 2024 13:57:46 +0000
>> Cc: emacs-devel@gnu.org
>> From: Alan Mackenzie <acm@muc.de>
>> 
>> So my problem was being in c-ts-mode, for which all these things I don't
>> like about imenu are apparently normal.  It's one more reason for me to
>> carry on using CC Mode.
> 
> I just now tried "M-x imenu" in c-ts-mode, and I don't see such a
> catastrophe.  True, if you leave imenu-flatten at its default nil
> value, you need to choose top-level "kind" of identifiers before you
> can type the name.  For C, these "kinds" are Function, Variable, and
> Struct.  Once you do select one of them, Imenu prompts you again, and
> then you can type the identifiers, with completion, or type TAB to see
> all of the names.
> 
> This is not very different from what you are used to.
> 
> Yuan, why does c-ts-mode' Imenu support behave differently in this
> regard from CC Mode?  What was the rationale for the different
> behavior?

Oh, I thought hierarchical is the canonical way to do imenus. But as Stefan said, imenu should allow users to choose whether to show the menu flat or nested. In fact, several packages (consult.el, counsel.el) flattens imenu for years.

Yuan


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

* Re: My usage of imenu is broken.
  2024-05-28 21:28         ` Stefan Monnier
@ 2024-05-29  6:04           ` Juri Linkov
  0 siblings, 0 replies; 41+ messages in thread
From: Juri Linkov @ 2024-05-29  6:04 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Alan Mackenzie, Eli Zaretskii, Yuan Fu, emacs-devel

> FWIW, I think the problem partly lies on the side of `imenu`.
> The API should let major modes provide the info once and for all, and
> then the user should be able to choose whether they prefer to see it as
> a few steps down a decision tree (e.g. first choose the category then
> the identifier) or something else (e.g. completion of strings of the
> form "<IDENT> <CATEGORY>", or order-agnostic so you can write
> either "<IDENT> <CATEGORY>" or "<CATEGORY> <IDENT>", or ...).

While using a deep hierarchy of subcategories, it's clear how to order them
for the prefix option of 'imenu-flatten':

  "<SUB-CATEGORY-TOP> <SUB-CATEGORY-BOTTOM> <IDENT>"

But the suffix option of 'imenu-flatten' is ambiguous,
with the choice of whether to prefer this order:

  "<IDENT> <SUB-CATEGORY-TOP> <SUB-CATEGORY-BOTTOM>"

or

  "<IDENT> <SUB-CATEGORY-BOTTOM> <SUB-CATEGORY-TOP>"

Probably there is no *-ts-mode with more nested levels than 2,
but e.g. doc-view-imenu-index for a PDF with the hierarchical
table of contents both suffix orders make sense.



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

* Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-28 21:55     ` Stefan Monnier
@ 2024-05-29 11:16       ` Alan Mackenzie
  2024-05-29 11:43         ` Dmitry Gutov
                           ` (3 more replies)
  0 siblings, 4 replies; 41+ messages in thread
From: Alan Mackenzie @ 2024-05-29 11:16 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eli Zaretskii, emacs-devel

Hello, Stefan.

On Tue, May 28, 2024 at 17:55:28 -0400, Stefan Monnier wrote:
> > I now understand what's happening.  Stefan M committed a patch some
> > while ago, the effect of which is to force users who've set up their
> > auto-mode-alist for CC Mode to use c-ts-mode, etc., instead.

> That's one way to see it.  🙂



> > Yesterday, I'd reverted src/eval.c (which normally gets loaded via
> > desktop), and Stefan's patch converted it to c-ts-mode without me being
> > aware of this.

> The way I see it, the problem is in `c-ts-mode.el` where merely loading
> the file changes the default mode to use for C files to `c-ts-mode`
> (tho only in the current session, thank god).

What's wrong with that?  "Merely" loading CC Mode adds entries to
auto-mode-alist for this.  Surely lots of other libraries do this, too.

> My patch(es) only change(s) the mechanism used for that.

No.  It/they subvert(s) the mode chosen by the user.  As I said, when I
did M-x revert-buffer yesterday, Emacs changed my major mode from C Mode
to c-ts-mode.  This is clearly unacceptable.

It is unacceptable to subvert the major mode set up by the user to some
other mode.  This is exactly what major-mode-remap-defaults is designed
to do.  If a user wishes to make such a substition that is her good
right, but for the Emacs maintainers silently to impose such a
substition on users is something else entirely.

> I think this is a misfeature of `c-ts-mode.el`, but this was the result
> of a long discussion and I don't think we want to revisit that yet.

Why did nobody involve me in this discussion, considering that the
result involves "stealing" CC Mode users?

> > I don't understand what major-mode-remap and major-mode-remap-defaults
> > are for.

> They are designed to allow specifying which C mode Emacs should use
> (not only for C, obviously).

That is what auto-mode-alist is for.  These two new alists do not add
useful functionality, they just add complexity, and they confuse users.

> In the past, `auto-mode-alist` way used for that, but that did not
> account for cases where the major mode is not specified via the file
> name, but instead via `-*- mode -*-`, or via `interpreter-mode-alist`,
> or via ...

That's a case of going for 100% perfection at the expense of the normal
case.  People don't put -*- c-mode -*- into files.  Not as a general
rule.

c-mode and c++-mode are registered trade marks of CC Mode, much as Emacs
means GNU Emacs, not any other editor with similar functionality.  If
somebody has specified -*- c-mode -*-, then they mean CC Mode.  If they
don't, they should write -*- c-ts-mode -*- instead, or Emacs should
provide something like -*- c-generic-mode -*-.

> Also it encouraged `c-ts-mode.el` (and friends) duplicating
> the regexps used to specify "this is probably a C file", often doing it
> slightly differently from the other major mode.

Surely a trivial problem, if a problem at all.

> Instead, conceptually `auto-mode-alist` should now be used to specify
> the type of content (tho represented not as something like a MIME type
> but as a symbol that (usually) denotes a major mode), and then
> `major-mode-remap` is used to decide which major mode to use for that
> file type.

Oh deity, no!  auto-mode-alist specifies the MODE, not some abstract
"content type".  You're proposing duplicating the entries in
auto-mode-alist with another list of the same size.  This can only cause
user confusion when instead of pushing an element to a-m-a, they also
have to push one to m-m-remap, and make sure they match up.

The solution to this problem is to emphasise that auto-mode-alist is an
alist of filenames and major modes, like it always has been.

> > They would appear to be duplicating and confusing the mechanism
> > of auto-mode-alist, and seem unnecessary.  It seems clear they are too
> > difficult to use.

> Clear as mud, indeed.

Then lets sort this out.  How about you proposing a solution to M-x
revert-buffer changing a buffer's major mode?  My solution would be to
revert the patch that introduced major-mode-remap-defaults.

>         Stefan

-- 
Alan Mackenzie (Nuremberg, Germany).



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

* Re: My usage of imenu is broken.
  2024-05-28 20:46       ` Alan Mackenzie
  2024-05-28 21:28         ` Stefan Monnier
@ 2024-05-29 11:31         ` Eli Zaretskii
  1 sibling, 0 replies; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-29 11:31 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: casouri, monnier, emacs-devel

> Date: Tue, 28 May 2024 20:46:48 +0000
> Cc: Yuan Fu <casouri@gmail.com>, monnier@iro.umontreal.ca, emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> > I just now tried "M-x imenu" in c-ts-mode, and I don't see such a
> > catastrophe.  True, if you leave imenu-flatten at its default nil
> > value, you need to choose top-level "kind" of identifiers before you
> > can type the name.  For C, these "kinds" are Function, Variable, and
> > Struct.  Once you do select one of them, Imenu prompts you again, and
> > then you can type the identifiers, with completion, or type TAB to see
> > all of the names.
> 
> > This is not very different from what you are used to.
> 
> It's different enough to me to matter.  It adds boilerplate entry to
> data entry, and would likely more than double the time to get to the
> target function.  I'm not saying here that it's bad, just that it would
> be bad for me.

Well, your original message sounded as if everything was completely
broken and nothing worked.

> > Yuan, why does c-ts-mode' Imenu support behave differently in this
> > regard from CC Mode?  What was the rationale for the different
> > behavior?
> 
> I'm not Yuan, but it could be a desire to support variables and structs
> as well as just functions.

If that's the reason, it can be handled with appropriate completion
tricks, like making the "kind" be a suffix rather than prefix, or
using substring completion style.



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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-29 11:16       ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Alan Mackenzie
@ 2024-05-29 11:43         ` Dmitry Gutov
  2024-05-29 12:51           ` Subversion of user chosen major mode by Emacs Alan Mackenzie
  2024-05-29 12:41         ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Eli Zaretskii
                           ` (2 subsequent siblings)
  3 siblings, 1 reply; 41+ messages in thread
From: Dmitry Gutov @ 2024-05-29 11:43 UTC (permalink / raw)
  To: Alan Mackenzie, Stefan Monnier; +Cc: Eli Zaretskii, emacs-devel

On 29/05/2024 14:16, Alan Mackenzie wrote:
>> I think this is a misfeature of `c-ts-mode.el`, but this was the result
>> of a long discussion and I don't think we want to revisit that yet.
> Why did nobody involve me in this discussion, considering that the
> result involves "stealing" CC Mode users?

This behavior is not new: loading a *-ts-mode has been overriding the 
user preferences since 2023-01-20 (commit 6b2f85caa6).

Perhaps your personal customization for auto-mode-alist had been 
shielding you from the original issue. You can add a similar entry to 
major-mode-remap-alist.



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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-29 11:16       ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Alan Mackenzie
  2024-05-29 11:43         ` Dmitry Gutov
@ 2024-05-29 12:41         ` Eli Zaretskii
  2024-05-29 13:29           ` Subversion of user chosen major mode by Emacs Alan Mackenzie
  2024-05-29 19:17         ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Eli Zaretskii
  2024-05-30  1:32         ` Stefan Monnier
  3 siblings, 1 reply; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-29 12:41 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: monnier, emacs-devel

> Date: Wed, 29 May 2024 11:16:44 +0000
> Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> As I said, when I did M-x revert-buffer yesterday, Emacs changed my
> major mode from C Mode to c-ts-mode.  This is clearly unacceptable.

Please show a minimal recipe, starting from "emacs -Q", where
reverting a buffer changes from c-mode to c-ts-mode.

As a general rule, revert-buffer does not guarantee the major mode
will remain the same, not by default.  It calls normal-mode, so if
anything has changed in automatic determination of the mode, you will
get a different mode.  This is by design.



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 11:43         ` Dmitry Gutov
@ 2024-05-29 12:51           ` Alan Mackenzie
  2024-05-29 16:08             ` Dmitry Gutov
  0 siblings, 1 reply; 41+ messages in thread
From: Alan Mackenzie @ 2024-05-29 12:51 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: Stefan Monnier, Eli Zaretskii, emacs-devel

Hello, Dmitry.

On Wed, May 29, 2024 at 14:43:29 +0300, Dmitry Gutov wrote:
> On 29/05/2024 14:16, Alan Mackenzie wrote:
> >> I think this is a misfeature of `c-ts-mode.el`, but this was the result
> >> of a long discussion and I don't think we want to revisit that yet.
> > Why did nobody involve me in this discussion, considering that the
> > result involves "stealing" CC Mode users?

> This behavior is not new: loading a *-ts-mode has been overriding the 
> user preferences since 2023-01-20 (commit 6b2f85caa6).

That has nothing to do with my point it is supposedly answering.

I've just had a look at that commit, and it simply adds entries to
auto-mode-alist for the *-ts-mode modes in the traditional, normal and
acceptable fashion.  CC Mode does the same.

The problem comes in a comment in that patch encouraging users to
subvert the proper meaning of c-mode, etc., from being specific modes to
being vague generic modes.  This is completely unnecessary for the
normal user who uses only the *-ts- modes and not CC Mode.  It is a
confusing mess for users who wish to use both of these, say for
comparison.

> Perhaps your personal customization for auto-mode-alist had been 
> shielding you from the original issue. You can add a similar entry to 
> major-mode-remap-alist.

Not sure what "original issue" you're referring to.  My customisation
for auto-mode-alist is an eval-after-load for c-ts-mode which deletes
the *-ts- entries from auto-mode-alist.  This has worked fine until
recently and should be restored to working again.

All this confusion in auto-mode-alist, and the horrible workarounds of
major-mode-remp_\(alist\|defaults\) result from a fundamental conceptual
error, namely changing c-mode and friends from having specific meanings
to being vague generic symbols.  THIS is what I should have been
consulted about, as the owner of these symbols.

The latest symptom of this misunderstanding, which I bumped into
yesterday, is that Emacs changes the major mode of a C buffer with M-x
revert-buffer.  This is clearly unacceptable.

-- 
Alan Mackenzie (Nuremberg, Germany).



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 12:41         ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Eli Zaretskii
@ 2024-05-29 13:29           ` Alan Mackenzie
  2024-05-29 14:20             ` Eli Zaretskii
  0 siblings, 1 reply; 41+ messages in thread
From: Alan Mackenzie @ 2024-05-29 13:29 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: monnier, emacs-devel

Hello, Eli.

On Wed, May 29, 2024 at 15:41:45 +0300, Eli Zaretskii wrote:
> > Date: Wed, 29 May 2024 11:16:44 +0000
> > Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>

> > As I said, when I did M-x revert-buffer yesterday, Emacs changed my
> > major mode from C Mode to c-ts-mode.  This is clearly unacceptable.

> Please show a minimal recipe, starting from "emacs -Q", where
> reverting a buffer changes from c-mode to c-ts-mode.

With a recent master emacs:
(i) emacs -Q
(ii) Insert the following into *scratch* and evaluate it:

(defun c-make-ts-undefault-mode ()
  "Make the older C and C++ Modes the default major modes for C(++)
files."
  (interactive)
  (let (c)
    (dolist (l '(c-ts-mode c++-ts-mode c-or-c++-ts-mode))
      (while (setq c (rassq l auto-mode-alist))
        (setq auto-mode-alist (remq c auto-mode-alist))))))
(eval-after-load 'c-ts-mode '(c-make-ts-undefault-mode))

(load-library "cc-mode")

..

(iii) C-x C-f src/xdisp.c.  This is loaded with C Mode.
(iv) M-: (load-library "c-ts-mode").
(v) M-x revert-buffer.  Emacs reloads the buffer in c-ts-mode.

> As a general rule, revert-buffer does not guarantee the major mode
> will remain the same, not by default.  It calls normal-mode, so if
> anything has changed in automatic determination of the mode, you will
> get a different mode.  This is by design.

Such changes to the automatic determination should be as a result of
user choices.  There shouldn't be nasty surprises in store.

-- 
Alan Mackenzie (Nuremberg, Germany).



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 13:29           ` Subversion of user chosen major mode by Emacs Alan Mackenzie
@ 2024-05-29 14:20             ` Eli Zaretskii
  2024-05-29 15:04               ` Stefan Monnier
  0 siblings, 1 reply; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-29 14:20 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: monnier, emacs-devel

> Date: Wed, 29 May 2024 13:29:34 +0000
> Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> > Please show a minimal recipe, starting from "emacs -Q", where
> > reverting a buffer changes from c-mode to c-ts-mode.
> 
> With a recent master emacs:
> (i) emacs -Q
> (ii) Insert the following into *scratch* and evaluate it:
> 
> (defun c-make-ts-undefault-mode ()
>   "Make the older C and C++ Modes the default major modes for C(++)
> files."
>   (interactive)
>   (let (c)
>     (dolist (l '(c-ts-mode c++-ts-mode c-or-c++-ts-mode))
>       (while (setq c (rassq l auto-mode-alist))
>         (setq auto-mode-alist (remq c auto-mode-alist))))))
> (eval-after-load 'c-ts-mode '(c-make-ts-undefault-mode))
> 
> (load-library "cc-mode")
> 
> ..
> 
> (iii) C-x C-f src/xdisp.c.  This is loaded with C Mode.
> (iv) M-: (load-library "c-ts-mode").
> (v) M-x revert-buffer.  Emacs reloads the buffer in c-ts-mode.

I can't say I'm happy with Stefan's change in commit 2b5d43081a,
especially with the fact that it overruled my opinions about such a
change without even mentioning that, let alone asking me, but frankly
I'm tired of holding this fort alone, with everyone else and their dog
telling me I don't know what I'm talking about,
major-mode-remap-alist/defaults being the best invention since sliced
bread.  Let others fight this battle now, because all that is left to
me to do, if I'm unwilling to give in, is to step down.  Maybe I
will...

But anyway, why do you consider the above kludges wrt auto-mode-alist
more "kosher" and worthy of our support than the similar kludge you
could do with major-mode-remap-defaults for Emacs 30 and later?  They
are both kludges one isn't supposed to do.

> > As a general rule, revert-buffer does not guarantee the major mode
> > will remain the same, not by default.  It calls normal-mode, so if
> > anything has changed in automatic determination of the mode, you will
> > get a different mode.  This is by design.
> 
> Such changes to the automatic determination should be as a result of
> user choices.  There shouldn't be nasty surprises in store.

When you load c-ts-mode, you tell Emacs you want to visit C files in
c-ts-mode.  If you want to go back, restart Emacs.  That has not
changed with Stefan's commit.  Yes, there are kludges to undo the
effect of loading c-ts-mode, and they are still there, you just need
to adapt them.  How is that a grave problem?



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 14:20             ` Eli Zaretskii
@ 2024-05-29 15:04               ` Stefan Monnier
  0 siblings, 0 replies; 41+ messages in thread
From: Stefan Monnier @ 2024-05-29 15:04 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Alan Mackenzie, emacs-devel

> But anyway, why do you consider the above kludges wrt auto-mode-alist
> more "kosher" and worthy of our support than the similar kludge you
> could do with major-mode-remap-defaults for Emacs 30 and later?
> They are both kludges one isn't supposed to do.

The "official" way to do it not is by customizing
`major-mode-remap-alist`, e.g.

    (push '(c-mode . c-mode) major-mode-remap-alist)

or do the same via Custom.
And you don't need to do that in a `with-eval-after-load`.


        Stefan




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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 12:51           ` Subversion of user chosen major mode by Emacs Alan Mackenzie
@ 2024-05-29 16:08             ` Dmitry Gutov
  2024-05-29 16:38               ` Eli Zaretskii
  2024-05-29 19:22               ` Alan Mackenzie
  0 siblings, 2 replies; 41+ messages in thread
From: Dmitry Gutov @ 2024-05-29 16:08 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Stefan Monnier, Eli Zaretskii, emacs-devel

Hi Alan,

On 29/05/2024 15:51, Alan Mackenzie wrote:

> On Wed, May 29, 2024 at 14:43:29 +0300, Dmitry Gutov wrote:
>> On 29/05/2024 14:16, Alan Mackenzie wrote:
>>>> I think this is a misfeature of `c-ts-mode.el`, but this was the result
>>>> of a long discussion and I don't think we want to revisit that yet.
>>> Why did nobody involve me in this discussion, considering that the
>>> result involves "stealing" CC Mode users?
> 
>> This behavior is not new: loading a *-ts-mode has been overriding the
>> user preferences since 2023-01-20 (commit 6b2f85caa6).
> 
> That has nothing to do with my point it is supposedly answering.
> 
> I've just had a look at that commit, and it simply adds entries to
> auto-mode-alist for the *-ts-mode modes in the traditional, normal and
> acceptable fashion.  CC Mode does the same.

That's not the same thing: all CC Mode entries are behind ###autoload, 
meaning that the alist does not actually change when you load the file 
(as long as the autoloads are properly generated when you build Emacs).

> The problem comes in a comment in that patch encouraging users to
> subvert the proper meaning of c-mode, etc., from being specific modes to
> being vague generic modes.  This is completely unnecessary for the
> normal user who uses only the *-ts- modes and not CC Mode.  It is a
> confusing mess for users who wish to use both of these, say for
> comparison.
> 
>> Perhaps your personal customization for auto-mode-alist had been
>> shielding you from the original issue. You can add a similar entry to
>> major-mode-remap-alist.
> 
> Not sure what "original issue" you're referring to.  My customisation
> for auto-mode-alist is an eval-after-load for c-ts-mode which deletes
> the *-ts- entries from auto-mode-alist.  This has worked fine until
> recently and should be restored to working again.

Naturally, this only works while auto-mode-alist remains the last source 
of truth regarding the mapping.

> All this confusion in auto-mode-alist, and the horrible workarounds of
> major-mode-remp_\(alist\|defaults\) result from a fundamental conceptual
> error, namely changing c-mode and friends from having specific meanings
> to being vague generic symbols.  THIS is what I should have been
> consulted about, as the owner of these symbols.

I agree that the terminology might be confusing. We've had a discussion 
regarding adding the notion of "languages" to Emacs (I even posted a 
proposal), but so far we decided to go with the "lighter" solution.

> The latest symptom of this misunderstanding, which I bumped into
> yesterday, is that Emacs changes the major mode of a C buffer with M-x
> revert-buffer.  This is clearly unacceptable.

And that started happening since commit 6b2f85caa6, you can look for the 
related discussions and the objections that were voiced at the time.



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 16:08             ` Dmitry Gutov
@ 2024-05-29 16:38               ` Eli Zaretskii
  2024-05-29 17:56                 ` Dmitry Gutov
  2024-05-29 19:22               ` Alan Mackenzie
  1 sibling, 1 reply; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-29 16:38 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: acm, monnier, emacs-devel

> Date: Wed, 29 May 2024 19:08:46 +0300
> Cc: Stefan Monnier <monnier@iro.umontreal.ca>, Eli Zaretskii <eliz@gnu.org>,
>  emacs-devel@gnu.org
> From: Dmitry Gutov <dmitry@gutov.dev>
> 
> > The latest symptom of this misunderstanding, which I bumped into
> > yesterday, is that Emacs changes the major mode of a C buffer with M-x
> > revert-buffer.  This is clearly unacceptable.
> 
> And that started happening since commit 6b2f85caa6

No, it didn't.  That commit changed nothing about how revert-buffer
behaves.  Please stop these insinuations.  I said I don't want to go
into that argument again, so you want to force me??  Just let it be.



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 16:38               ` Eli Zaretskii
@ 2024-05-29 17:56                 ` Dmitry Gutov
  0 siblings, 0 replies; 41+ messages in thread
From: Dmitry Gutov @ 2024-05-29 17:56 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acm, monnier, emacs-devel

On 29/05/2024 19:38, Eli Zaretskii wrote:
>> Date: Wed, 29 May 2024 19:08:46 +0300
>> Cc: Stefan Monnier <monnier@iro.umontreal.ca>, Eli Zaretskii <eliz@gnu.org>,
>>   emacs-devel@gnu.org
>> From: Dmitry Gutov <dmitry@gutov.dev>
>>
>>> The latest symptom of this misunderstanding, which I bumped into
>>> yesterday, is that Emacs changes the major mode of a C buffer with M-x
>>> revert-buffer.  This is clearly unacceptable.
>>
>> And that started happening since commit 6b2f85caa6
> 
> No, it didn't.  That commit changed nothing about how revert-buffer
> behaves.

That's true, apologies for being imprecise: 'M-x revert-buffer' has 
always re-applied the configured major mode. The odds of it being 
changed (due to the change in configuration) just increased somewhat 
with the commit I mentioned.

> Please stop these insinuations.  I said I don't want to go
> into that argument again, so you want to force me??  Just let it be.

Sorry, I just wanted to get everyone on the same page.



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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-29 11:16       ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Alan Mackenzie
  2024-05-29 11:43         ` Dmitry Gutov
  2024-05-29 12:41         ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Eli Zaretskii
@ 2024-05-29 19:17         ` Eli Zaretskii
  2024-05-30  1:32         ` Stefan Monnier
  3 siblings, 0 replies; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-29 19:17 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: monnier, emacs-devel

> Date: Wed, 29 May 2024 11:16:44 +0000
> Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> > In the past, `auto-mode-alist` way used for that, but that did not
> > account for cases where the major mode is not specified via the file
> > name, but instead via `-*- mode -*-`, or via `interpreter-mode-alist`,
> > or via ...
> 
> That's a case of going for 100% perfection at the expense of the normal
> case.  People don't put -*- c-mode -*- into files.  Not as a general
> rule.
> 
> c-mode and c++-mode are registered trade marks of CC Mode, much as Emacs
> means GNU Emacs, not any other editor with similar functionality.  If
> somebody has specified -*- c-mode -*-, then they mean CC Mode.

Actually, this may or may not be true.  There are cases where people
put "-*- c++ -*-" etc. in files, but any mode supporting C++ will do.
As one example, consider the libstdc++ headers such as 'algorithm' and
others that have no file-name extension: it is clear that the mode
cookie there does not necessarily mean these files should only be
edited with c++-mode.  As another example, consider the *.h files that
are part of GDB sources: not every header file there will be
identified by Emacs as C++ just by looking at the contents, so the GDB
developers want to make sure Emacs turns on some C++ supporting mode
when editing these files.

As yet another example, consider our .dir-locals.el files: the
mode-specific settings there don't care whether the user uses c-mode
or c-ts-mode to edit our C sources.

And there can be other examples.  So sometimes the major mode symbol
does in fact stand for the type of content and not for the specific
mode it names.  And Emacs should support these use cases, because
users are rightfully annoyed when they need to duplicate the same
boring settings.

> or Emacs should provide something like -*- c-generic-mode -*-.

That'd be swell, and we do provide these in some cases.  But doing so
is only possible if the maintainers of the related modes agree to
cooperate to bring their modes closer.  And you at the time were not
very enthusiastic, to say the least, about any such involvement.  So
here we are.

> > Also it encouraged `c-ts-mode.el` (and friends) duplicating
> > the regexps used to specify "this is probably a C file", often doing it
> > slightly differently from the other major mode.
> 
> Surely a trivial problem, if a problem at all.

Actually, our experience since introduction of the *-ts-modes
indicates it is not a trivial problem at all.  To wit: we don't yet
have a good solution for it, and several naïve attempts proved to
cause problems we needed to fix.  It is surprising how a typical
mode's simplest definitions are tightly coupled with the
implementation of the basic features we need for major modes:
font-lock, indentation, syntax analysis, etc.  It turns out our
abstractions in that department leak like hell.

> > Instead, conceptually `auto-mode-alist` should now be used to specify
> > the type of content (tho represented not as something like a MIME type
> > but as a symbol that (usually) denotes a major mode), and then
> > `major-mode-remap` is used to decide which major mode to use for that
> > file type.
> 
> Oh deity, no!  auto-mode-alist specifies the MODE, not some abstract
> "content type".

See above: not necessarily true, at least not in all cases.

And note that mode symbols are used not only in auto-mode-alist.  A
very frequent use is as an argument to the likes of derived-mode-p.



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 16:08             ` Dmitry Gutov
  2024-05-29 16:38               ` Eli Zaretskii
@ 2024-05-29 19:22               ` Alan Mackenzie
  2024-05-29 19:45                 ` Andrea Corallo
                                   ` (2 more replies)
  1 sibling, 3 replies; 41+ messages in thread
From: Alan Mackenzie @ 2024-05-29 19:22 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: Stefan Monnier, Eli Zaretskii, emacs-devel

Hello, Dmitry.

On Wed, May 29, 2024 at 19:08:46 +0300, Dmitry Gutov wrote:
> Hi Alan,

> On 29/05/2024 15:51, Alan Mackenzie wrote:

> > On Wed, May 29, 2024 at 14:43:29 +0300, Dmitry Gutov wrote:
> >> On 29/05/2024 14:16, Alan Mackenzie wrote:
> >>>> I think this is a misfeature of `c-ts-mode.el`, but this was the result
> >>>> of a long discussion and I don't think we want to revisit that yet.
> >>> Why did nobody involve me in this discussion, considering that the
> >>> result involves "stealing" CC Mode users?

> >> This behavior is not new: loading a *-ts-mode has been overriding the
> >> user preferences since 2023-01-20 (commit 6b2f85caa6).

> > That has nothing to do with my point it is supposedly answering.

> > I've just had a look at that commit, and it simply adds entries to
> > auto-mode-alist for the *-ts-mode modes in the traditional, normal and
> > acceptable fashion.  CC Mode does the same.

> That's not the same thing: all CC Mode entries are behind ###autoload, 
> meaning that the alist does not actually change when you load the file 
> (as long as the autoloads are properly generated when you build Emacs).

Ah yes, you're right.  The entries to auto-mode-alist in cc-mode.el are
in comments (autoload comments), so that's one reason loading CC Mode
doesn't put those entries to the top of the alist.

To be honest, I'm surprised that c-ts-mode and friends haven't come to
have autoload entries for auto-mode-alist, superseding those in CC Mode.
Perhaps if this had been done, the unpleasantness caused by
major-mode-remap-alist/defaults could have been avoided.

> > The problem comes in a comment in that patch encouraging users to
> > subvert the proper meaning of c-mode, etc., from being specific modes to
> > being vague generic modes.  This is completely unnecessary for the
> > normal user who uses only the *-ts- modes and not CC Mode.  It is a
> > confusing mess for users who wish to use both of these, say for
> > comparison.

> >> Perhaps your personal customization for auto-mode-alist had been
> >> shielding you from the original issue. You can add a similar entry to
> >> major-mode-remap-alist.

> > Not sure what "original issue" you're referring to.  My customisation
> > for auto-mode-alist is an eval-after-load for c-ts-mode which deletes
> > the *-ts- entries from auto-mode-alist.  This has worked fine until
> > recently and should be restored to working again.

> Naturally, this only works while auto-mode-alist remains the last source 
> of truth regarding the mapping.

As it should.  major-mode-remap-alist and the other one add complexity to
Emacs, confuse users (as they have confused me) and add no worthwhile
facility to Emacs.

> > All this confusion in auto-mode-alist, and the horrible workarounds of
> > major-mode-remp_\(alist\|defaults\) result from a fundamental conceptual
> > error, namely changing c-mode and friends from having specific meanings
> > to being vague generic symbols.  THIS is what I should have been
> > consulted about, as the owner of these symbols.

> I agree that the terminology might be confusing. We've had a discussion 
> regarding adding the notion of "languages" to Emacs (I even posted a 
> proposal), but so far we decided to go with the "lighter" solution.

Again, the source of the current problem was the misuse of the symbols
c-mode and c++-mode to mean something other than the major modes in CC
Mode.  Again, nobody consulted me about this at all.

> > The latest symptom of this misunderstanding, which I bumped into
> > yesterday, is that Emacs changes the major mode of a C buffer with M-x
> > revert-buffer.  This is clearly unacceptable.

> And that started happening since commit 6b2f85caa6, you can look for the 
> related discussions and the objections that were voiced at the time.

To be clear, what I find unacceptable is Emacs maintainers presuming to
override options explicitly set by the user with settings the maintainers
think are better.  That is the purpose of major-mode-remap-defaults.
There are other, better ways to set up c-ts-mode as the default default
mode for C files.

-- 
Alan Mackenzie (Nuremberg, Germany).



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 19:22               ` Alan Mackenzie
@ 2024-05-29 19:45                 ` Andrea Corallo
  2024-05-29 19:59                   ` Alan Mackenzie
  2024-05-29 22:10                 ` Dmitry Gutov
  2024-05-30  5:44                 ` Eli Zaretskii
  2 siblings, 1 reply; 41+ messages in thread
From: Andrea Corallo @ 2024-05-29 19:45 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Dmitry Gutov, Stefan Monnier, Eli Zaretskii, emacs-devel

Alan Mackenzie <acm@muc.de> writes:

[...]

> To be clear, what I find unacceptable is Emacs maintainers presuming to
> override options explicitly set by the user with settings the maintainers
> think are better.  That is the purpose of major-mode-remap-defaults.
> There are other, better ways to set up c-ts-mode as the default default
> mode for C files.

Hi Alan,

please assume the good faith of the other developers here.
'major-mode-remap-defaults' was added for (valid or not) technical
reasons and it might very well come with (good or bad) consequences we
can discuss, but there's no conspiracy here.

Thanks

  Andrea



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 19:45                 ` Andrea Corallo
@ 2024-05-29 19:59                   ` Alan Mackenzie
  2024-05-30  5:01                     ` Eli Zaretskii
  0 siblings, 1 reply; 41+ messages in thread
From: Alan Mackenzie @ 2024-05-29 19:59 UTC (permalink / raw)
  To: Andrea Corallo; +Cc: Dmitry Gutov, Stefan Monnier, Eli Zaretskii, emacs-devel

Hello, Andrea.

On Wed, May 29, 2024 at 15:45:37 -0400, Andrea Corallo wrote:
> Alan Mackenzie <acm@muc.de> writes:

> [...]

> > To be clear, what I find unacceptable is Emacs maintainers presuming to
> > override options explicitly set by the user with settings the maintainers
> > think are better.  That is the purpose of major-mode-remap-defaults.
> > There are other, better ways to set up c-ts-mode as the default default
> > mode for C files.

> Hi Alan,

> please assume the good faith of the other developers here.
> 'major-mode-remap-defaults' was added for (valid or not) technical
> reasons and it might very well come with (good or bad) consequences we
> can discuss, but there's no conspiracy here.

Just to be clear, I don't doubt the good faith of others, here.  When I
wrote about "the purpose of major-mode-remap-defaults" I meant it
literally, ascribing motivation to the variable, not to maintainers.
Sorry I wasn't clearer.

My intention was to make other maintainers, including he who wrote it,
aware of what was at stake.  There's a very old principle in Emacs not
to interfere in user set options.  That's what I see being violated
here.

> Thanks

>   Andrea

-- 
Alan Mackenzie (Nuremberg, Germany).



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 19:22               ` Alan Mackenzie
  2024-05-29 19:45                 ` Andrea Corallo
@ 2024-05-29 22:10                 ` Dmitry Gutov
  2024-05-30  5:51                   ` Eli Zaretskii
  2024-05-30  5:44                 ` Eli Zaretskii
  2 siblings, 1 reply; 41+ messages in thread
From: Dmitry Gutov @ 2024-05-29 22:10 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Stefan Monnier, Eli Zaretskii, emacs-devel

Hi Alan,

On 29/05/2024 22:22, Alan Mackenzie wrote:

>>> I've just had a look at that commit, and it simply adds entries to
>>> auto-mode-alist for the *-ts-mode modes in the traditional, normal and
>>> acceptable fashion.  CC Mode does the same.
> 
>> That's not the same thing: all CC Mode entries are behind ###autoload,
>> meaning that the alist does not actually change when you load the file
>> (as long as the autoloads are properly generated when you build Emacs).
> 
> Ah yes, you're right.  The entries to auto-mode-alist in cc-mode.el are
> in comments (autoload comments), so that's one reason loading CC Mode
> doesn't put those entries to the top of the alist.
> 
> To be honest, I'm surprised that c-ts-mode and friends haven't come to
> have autoload entries for auto-mode-alist, superseding those in CC Mode.
> Perhaps if this had been done, the unpleasantness caused by
> major-mode-remap-alist/defaults could have been avoided.

IIUC, the current state of affairs is an attempt to balance the needs of 
users who want to test out and use the tree-sitter modes with as little 
friction as possible, against the needs of older users who can get 
annoyed at the switch in the defaults (and the extra work required to 
install the tree-sitter libraries, bug#60559).



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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-29 11:16       ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Alan Mackenzie
                           ` (2 preceding siblings ...)
  2024-05-29 19:17         ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Eli Zaretskii
@ 2024-05-30  1:32         ` Stefan Monnier
  2024-05-30  5:25           ` Eli Zaretskii
  3 siblings, 1 reply; 41+ messages in thread
From: Stefan Monnier @ 2024-05-30  1:32 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Eli Zaretskii, emacs-devel

> If somebody has specified -*- c-mode -*-, then they mean CC Mode.
> If they don't, they should write -*- c-ts-mode -*- instead, or Emacs
> should provide something like -*- c-generic-mode -*-.

I strongly disagree: file-local variables should describe the file's
content, not the user's favorite environment to edit it.
Otherwise, it's impossible for two users who have different preferences
to share that file.


        Stefan




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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 19:59                   ` Alan Mackenzie
@ 2024-05-30  5:01                     ` Eli Zaretskii
  2024-05-30 11:02                       ` Alan Mackenzie
  0 siblings, 1 reply; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-30  5:01 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: acorallo, dmitry, monnier, emacs-devel

> Date: Wed, 29 May 2024 19:59:23 +0000
> Cc: Dmitry Gutov <dmitry@gutov.dev>,
>   Stefan Monnier <monnier@iro.umontreal.ca>, Eli Zaretskii <eliz@gnu.org>,
>   emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> My intention was to make other maintainers, including he who wrote it,
> aware of what was at stake.

We are aware.

> There's a very old principle in Emacs not to interfere in user set
> options.

auto-mode-alist is NOT a user option, never was.  Emacs has been
tweaking its value for users' benefits for eons, and CC Mode does that
as well.

major-mode-remap-alist _is_ a user option, which is one reason why
solutions proposed back when Emacs 29 was in the works that involved
changing the value of major-mode-remap-alist were unacceptable to me.
The changes installed by Stefan don't touch major-mode-remap-alist,
probably for the same reason; instead, they introduce a new internal
variable and tweak that.

> That's what I see being violated here.

No, it is not.



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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-30  1:32         ` Stefan Monnier
@ 2024-05-30  5:25           ` Eli Zaretskii
  2024-05-30  7:39             ` Po Lu
  2024-05-30 14:18             ` Stefan Monnier
  0 siblings, 2 replies; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-30  5:25 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: acm, emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: Eli Zaretskii <eliz@gnu.org>,  emacs-devel@gnu.org
> Date: Wed, 29 May 2024 21:32:05 -0400
> 
> > If somebody has specified -*- c-mode -*-, then they mean CC Mode.
> > If they don't, they should write -*- c-ts-mode -*- instead, or Emacs
> > should provide something like -*- c-generic-mode -*-.
> 
> I strongly disagree: file-local variables should describe the file's
> content, not the user's favorite environment to edit it.

How do we know that this was the intent?  It could be either of these
two, whether you like it or not.

If we want to know for sure, perhaps we need to introduce a new kind
of cookie, like 'force-mode: c++-mode' or somesuch.

> Otherwise, it's impossible for two users who have different preferences
> to share that file.

How do I force the use of a specific mode when more than one can
handle the file?  It is possible that the file relies on some features
specific to that mode, so such use cases are not outlandish.



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 19:22               ` Alan Mackenzie
  2024-05-29 19:45                 ` Andrea Corallo
  2024-05-29 22:10                 ` Dmitry Gutov
@ 2024-05-30  5:44                 ` Eli Zaretskii
  2 siblings, 0 replies; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-30  5:44 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: dmitry, monnier, emacs-devel

> Date: Wed, 29 May 2024 19:22:13 +0000
> Cc: Stefan Monnier <monnier@iro.umontreal.ca>, Eli Zaretskii <eliz@gnu.org>,
>   emacs-devel@gnu.org
> From: Alan Mackenzie <acm@muc.de>
> 
> > > I've just had a look at that commit, and it simply adds entries to
> > > auto-mode-alist for the *-ts-mode modes in the traditional, normal and
> > > acceptable fashion.  CC Mode does the same.
> 
> > That's not the same thing: all CC Mode entries are behind ###autoload, 
> > meaning that the alist does not actually change when you load the file 
> > (as long as the autoloads are properly generated when you build Emacs).
> 
> Ah yes, you're right.  The entries to auto-mode-alist in cc-mode.el are
> in comments (autoload comments), so that's one reason loading CC Mode
> doesn't put those entries to the top of the alist.
> 
> To be honest, I'm surprised that c-ts-mode and friends haven't come to
> have autoload entries for auto-mode-alist, superseding those in CC Mode.

The reason should be clear if you consider the intent: the TS modes
are _optional_.  We want to let users try them easily and make up
their minds whether they like them better than the "traditional" modes
for the same languages/content types, before they configure Emacs to
use one or the other.

It is impossible to do what CC Mode does for optional modes.  Or at
least it was tricky enough to implement as close to the release of
Emacs 29 as we were when these decisions were made.

More generally, Emacs has never seriously faced the situation that
there's more than one major-mode for a particular programming
language.  The few cases that we did have (perl-mode vs cperl-mode,
tex-mode vs AUCTeX, and some others) were each "resolved" by some
lucky factor, like if one of the two modes fell into oblivion or one
of them was not in core or whatever.  This is the first time we had to
deal with this problem, so some rough edges and semi-kludgey solutions
should be expected.  Dismissing the problems as if the solutions are
simple and "at hand" doesn't help, because the easy solutions were
already tried, and they all more-or-less failed.

> Perhaps if this had been done, the unpleasantness caused by
> major-mode-remap-alist/defaults could have been avoided.

We tried something like that.  It didn't work: people complained
loudly (and rightfully so).  You just don't remember it, or didn't pay
attention, but it all played out here, and commit 6b2f85caa6 was the
response to those problems.

> Again, the source of the current problem was the misuse of the symbols
> c-mode and c++-mode to mean something other than the major modes in CC
> Mode.  Again, nobody consulted me about this at all.

The issue is not about CC Mode, it's about every mode that now has a
sibling *-ts-mode that supports the same language/content type.
Therefore, there was no need to consult you personally, when the
discussions were all very public (and noisy).  If you were interested,
why haven't you chimed in back then?  And given your publicly
expressed lack of interest in c-ts-mode, can you really blame me for
not reaching out to you personally?

> > And that started happening since commit 6b2f85caa6, you can look for the 
> > related discussions and the objections that were voiced at the time.
> 
> To be clear, what I find unacceptable is Emacs maintainers presuming to
> override options explicitly set by the user with settings the maintainers
> think are better.

Emacs maintainers respect user options a lot.  But your assertion
above is simply false, because no user option was overridden, neither
by commit 6b2f85caa6 nor by changes installed by Stefan in March.
They both deal with variables that are not user options, and Emacs has
been modifying the defaults used by user options since time
immemorial.  So your complaints in this matter are at least
surprising.



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-29 22:10                 ` Dmitry Gutov
@ 2024-05-30  5:51                   ` Eli Zaretskii
  0 siblings, 0 replies; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-30  5:51 UTC (permalink / raw)
  To: Dmitry Gutov; +Cc: acm, monnier, emacs-devel

> Date: Thu, 30 May 2024 01:10:04 +0300
> Cc: Stefan Monnier <monnier@iro.umontreal.ca>, Eli Zaretskii <eliz@gnu.org>,
>  emacs-devel@gnu.org
> From: Dmitry Gutov <dmitry@gutov.dev>
> 
> > To be honest, I'm surprised that c-ts-mode and friends haven't come to
> > have autoload entries for auto-mode-alist, superseding those in CC Mode.
> > Perhaps if this had been done, the unpleasantness caused by
> > major-mode-remap-alist/defaults could have been avoided.
> 
> IIUC, the current state of affairs is an attempt to balance the needs of 
> users who want to test out and use the tree-sitter modes with as little 
> friction as possible, against the needs of older users who can get 
> annoyed at the switch in the defaults

True.



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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-30  5:25           ` Eli Zaretskii
@ 2024-05-30  7:39             ` Po Lu
  2024-05-30  7:53               ` Eli Zaretskii
  2024-05-30 14:18             ` Stefan Monnier
  1 sibling, 1 reply; 41+ messages in thread
From: Po Lu @ 2024-05-30  7:39 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Stefan Monnier, acm, emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> How do we know that this was the intent?  It could be either of these
> two, whether you like it or not.
>
> If we want to know for sure, perhaps we need to introduce a new kind
> of cookie, like 'force-mode: c++-mode' or somesuch.

eval: (c-mode 1)

?

Disclaimer, this hasn't been tested.



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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-30  7:39             ` Po Lu
@ 2024-05-30  7:53               ` Eli Zaretskii
  0 siblings, 0 replies; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-30  7:53 UTC (permalink / raw)
  To: Po Lu; +Cc: monnier, acm, emacs-devel

> From: Po Lu <luangruo@yahoo.com>
> Cc: Stefan Monnier <monnier@iro.umontreal.ca>,  acm@muc.de,
>   emacs-devel@gnu.org
> Date: Thu, 30 May 2024 15:39:30 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > How do we know that this was the intent?  It could be either of these
> > two, whether you like it or not.
> >
> > If we want to know for sure, perhaps we need to introduce a new kind
> > of cookie, like 'force-mode: c++-mode' or somesuch.
> 
> eval: (c-mode 1)
> 
> ?

Using 'eval' is problematic because it isn't considered safe in local
variables.



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

* Re: Subversion of user chosen major mode by Emacs.
  2024-05-30  5:01                     ` Eli Zaretskii
@ 2024-05-30 11:02                       ` Alan Mackenzie
  0 siblings, 0 replies; 41+ messages in thread
From: Alan Mackenzie @ 2024-05-30 11:02 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acorallo, dmitry, monnier, emacs-devel

Hello, Eli.

On Thu, May 30, 2024 at 08:01:36 +0300, Eli Zaretskii wrote:
> > Date: Wed, 29 May 2024 19:59:23 +0000
> > Cc: Dmitry Gutov <dmitry@gutov.dev>,
> >   Stefan Monnier <monnier@iro.umontreal.ca>, Eli Zaretskii <eliz@gnu.org>,
> >   emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>

> > My intention was to make other maintainers, including he who wrote it,
> > aware of what was at stake.

> We are aware.

> > There's a very old principle in Emacs not to interfere in user set
> > options.

> auto-mode-alist is NOT a user option, never was.  Emacs has been
> tweaking its value for users' benefits for eons, and CC Mode does that
> as well.

> major-mode-remap-alist _is_ a user option, which is one reason why
> solutions proposed back when Emacs 29 was in the works that involved
> changing the value of major-mode-remap-alist were unacceptable to me.
> The changes installed by Stefan don't touch major-mode-remap-alist,
> probably for the same reason; instead, they introduce a new internal
> variable and tweak that.

> > That's what I see being violated here.

> No, it is not.

My decision to use C Mode rather than c-ts-mode I see as a user option
exercised by me.  Two days ago, that choice of mine was usurped, when
Emacs decided that rather than c-mode, I really wanted c-ts-mode.

The point here is we have identity theft.  The symbol c-mode is the name
of CC Mode's mode for C.  It has no other name.  The symbol belongs to
CC Mode.  But others have decided that c-mode is to have additional
meanings, diluting its primary meaning.  It is as though somebody
decided that "Eli Zaretskii", rather than meaning you, meant "a generic
Emacs maintainer".  You would not like it.

Anyhow, I see a way forward.  I will amend CC Mode also to make entries
in major-mode-remap-defaults.  This would appear to be in the spirit of
that undocumented variable.  It doesn't feel ideal, though.

-- 
Alan Mackenzie (Nuremberg, Germany).



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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-30  5:25           ` Eli Zaretskii
  2024-05-30  7:39             ` Po Lu
@ 2024-05-30 14:18             ` Stefan Monnier
  2024-05-30 14:33               ` Po Lu
  2024-05-30 14:56               ` Eli Zaretskii
  1 sibling, 2 replies; 41+ messages in thread
From: Stefan Monnier @ 2024-05-30 14:18 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acm, emacs-devel

>> Otherwise, it's impossible for two users who have different preferences
>> to share that file.
> How do I force the use of a specific mode when more than one can
> handle the file?  It is possible that the file relies on some features
> specific to that mode, so such use cases are not outlandish.

AFAICT it is a lot more common for file-local vars to be abused to
specify mere user preferences, than the reverse (i.e. where there really
is a technical reason why the file should be edited with js2-mode rather
than js-mode).


        Stefan




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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-30 14:18             ` Stefan Monnier
@ 2024-05-30 14:33               ` Po Lu
  2024-05-30 15:08                 ` Stefan Monnier
  2024-05-30 14:56               ` Eli Zaretskii
  1 sibling, 1 reply; 41+ messages in thread
From: Po Lu @ 2024-05-30 14:33 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eli Zaretskii, acm, emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

>>> Otherwise, it's impossible for two users who have different preferences
>>> to share that file.
>> How do I force the use of a specific mode when more than one can
>> handle the file?  It is possible that the file relies on some features
>> specific to that mode, so such use cases are not outlandish.
>
> AFAICT it is a lot more common for file-local vars to be abused to
> specify mere user preferences, than the reverse (i.e. where there really
> is a technical reason why the file should be edited with js2-mode rather
> than js-mode).

True, but this doesn't answer Eli's question.



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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-30 14:18             ` Stefan Monnier
  2024-05-30 14:33               ` Po Lu
@ 2024-05-30 14:56               ` Eli Zaretskii
  2024-05-30 15:12                 ` Stefan Monnier
  1 sibling, 1 reply; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-30 14:56 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: acm, emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: acm@muc.de,  emacs-devel@gnu.org
> Date: Thu, 30 May 2024 10:18:49 -0400
> 
> >> Otherwise, it's impossible for two users who have different preferences
> >> to share that file.
> > How do I force the use of a specific mode when more than one can
> > handle the file?  It is possible that the file relies on some features
> > specific to that mode, so such use cases are not outlandish.
> 
> AFAICT it is a lot more common for file-local vars to be abused to
> specify mere user preferences, than the reverse (i.e. where there really
> is a technical reason why the file should be edited with js2-mode rather
> than js-mode).

"More common", maybe.  But that doesn't mean the other case doesn't
exist or is not legitimate.



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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-30 14:33               ` Po Lu
@ 2024-05-30 15:08                 ` Stefan Monnier
  0 siblings, 0 replies; 41+ messages in thread
From: Stefan Monnier @ 2024-05-30 15:08 UTC (permalink / raw)
  To: Po Lu; +Cc: Eli Zaretskii, acm, emacs-devel

>> AFAICT it is a lot more common for file-local vars to be abused to
>> specify mere user preferences, than the reverse (i.e. where there really
>> is a technical reason why the file should be edited with js2-mode rather
>> than js-mode).
> True, but this doesn't answer Eli's question.

No, I didn't feel the need to repeat your answer.

And of course there are various other solutions: this is Emacs we're
talking about, so you can "always" code-your way around any special case.

E.g. it's easy enough to

    (defalias 'cc-c-mode #'c-mode)

and then use

    -*- cc-c -*-

And if it ever turns into a common enough need, it'll be easy to
streamline one of those solutions.


        Stefan




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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-30 14:56               ` Eli Zaretskii
@ 2024-05-30 15:12                 ` Stefan Monnier
  2024-05-30 15:29                   ` Alan Mackenzie
  2024-05-30 16:06                   ` Eli Zaretskii
  0 siblings, 2 replies; 41+ messages in thread
From: Stefan Monnier @ 2024-05-30 15:12 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: acm, emacs-devel

>> AFAICT it is a lot more common for file-local vars to be abused to
>> specify mere user preferences, than the reverse (i.e. where there really
>> is a technical reason why the file should be edited with js2-mode rather
>> than js-mode).
> "More common", maybe.  But that doesn't mean the other case doesn't
> exist or is not legitimate.

I don't doubt such cases exist.  I personally can't think of any, tho.
So, being hypothetical, I tend to consider it as a fringe problem which
is OK to solve with fringe solutions.

Can you point to non-hypothetical examples?


        Stefan




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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-30 15:12                 ` Stefan Monnier
@ 2024-05-30 15:29                   ` Alan Mackenzie
  2024-05-30 18:30                     ` Stefan Monnier
  2024-05-30 16:06                   ` Eli Zaretskii
  1 sibling, 1 reply; 41+ messages in thread
From: Alan Mackenzie @ 2024-05-30 15:29 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Eli Zaretskii, emacs-devel

Hello, Stefan.

On Thu, May 30, 2024 at 11:12:44 -0400, Stefan Monnier wrote:
> >> AFAICT it is a lot more common for file-local vars to be abused to
> >> specify mere user preferences, than the reverse (i.e. where there really
> >> is a technical reason why the file should be edited with js2-mode rather
> >> than js-mode).
> > "More common", maybe.  But that doesn't mean the other case doesn't
> > exist or is not legitimate.

> I don't doubt such cases exist.  I personally can't think of any, tho.
> So, being hypothetical, I tend to consider it as a fringe problem which
> is OK to solve with fringe solutions.

> Can you point to non-hypothetical examples?

I can point to a semi-hypothetical case: A device driver hacker may need
to use C Mode for a "hardware description" file which contains a 40,000
line function, for which c-ts-mode is unusably slow.  I have such a
file, packet-rrc.c, in my desktop.  The said hacker may, however, prefer
c-ts-mode for more normal files, so will set up the mode in file-local
variables or the top line of the file.

>         Stefan

-- 
Alan Mackenzie (Nuremberg, Germany).



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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-30 15:12                 ` Stefan Monnier
  2024-05-30 15:29                   ` Alan Mackenzie
@ 2024-05-30 16:06                   ` Eli Zaretskii
  1 sibling, 0 replies; 41+ messages in thread
From: Eli Zaretskii @ 2024-05-30 16:06 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: acm, emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: acm@muc.de,  emacs-devel@gnu.org
> Date: Thu, 30 May 2024 11:12:44 -0400
> 
> Can you point to non-hypothetical examples?

Alan is a non-hypothetical person who claims that his uses of that are
real.



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

* Re: Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.]
  2024-05-30 15:29                   ` Alan Mackenzie
@ 2024-05-30 18:30                     ` Stefan Monnier
  0 siblings, 0 replies; 41+ messages in thread
From: Stefan Monnier @ 2024-05-30 18:30 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: Eli Zaretskii, emacs-devel

> I can point to a semi-hypothetical case: A device driver hacker may need
> to use C Mode for a "hardware description" file which contains a 40,000
> line function, for which c-ts-mode is unusably slow.  I have such a
> file, packet-rrc.c, in my desktop.  The said hacker may, however, prefer
> c-ts-mode for more normal files, so will set up the mode in file-local
> variables or the top line of the file.

I see.  To me that sounds like a fringe enough case that a fringe
solution is OK (while waiting for `c-ts-mode` to fix that problem).
[ And of course, forcing `c-mode` for that one file may annoy that other
  contributor who prefers `sm-c-mode` instead.  🙂  ]

        Stefan




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

end of thread, other threads:[~2024-05-30 18:30 UTC | newest]

Thread overview: 41+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-28 10:53 My usage of imenu is broken Alan Mackenzie
2024-05-28 11:34 ` Eli Zaretskii
2024-05-28 13:57   ` Alan Mackenzie
2024-05-28 18:29     ` Eli Zaretskii
2024-05-28 20:46       ` Alan Mackenzie
2024-05-28 21:28         ` Stefan Monnier
2024-05-29  6:04           ` Juri Linkov
2024-05-29 11:31         ` Eli Zaretskii
2024-05-29  5:38       ` Yuan Fu
2024-05-28 21:55     ` Stefan Monnier
2024-05-29 11:16       ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Alan Mackenzie
2024-05-29 11:43         ` Dmitry Gutov
2024-05-29 12:51           ` Subversion of user chosen major mode by Emacs Alan Mackenzie
2024-05-29 16:08             ` Dmitry Gutov
2024-05-29 16:38               ` Eli Zaretskii
2024-05-29 17:56                 ` Dmitry Gutov
2024-05-29 19:22               ` Alan Mackenzie
2024-05-29 19:45                 ` Andrea Corallo
2024-05-29 19:59                   ` Alan Mackenzie
2024-05-30  5:01                     ` Eli Zaretskii
2024-05-30 11:02                       ` Alan Mackenzie
2024-05-29 22:10                 ` Dmitry Gutov
2024-05-30  5:51                   ` Eli Zaretskii
2024-05-30  5:44                 ` Eli Zaretskii
2024-05-29 12:41         ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Eli Zaretskii
2024-05-29 13:29           ` Subversion of user chosen major mode by Emacs Alan Mackenzie
2024-05-29 14:20             ` Eli Zaretskii
2024-05-29 15:04               ` Stefan Monnier
2024-05-29 19:17         ` Subversion of user chosen major mode by Emacs. [Was: My usage of imenu is broken.] Eli Zaretskii
2024-05-30  1:32         ` Stefan Monnier
2024-05-30  5:25           ` Eli Zaretskii
2024-05-30  7:39             ` Po Lu
2024-05-30  7:53               ` Eli Zaretskii
2024-05-30 14:18             ` Stefan Monnier
2024-05-30 14:33               ` Po Lu
2024-05-30 15:08                 ` Stefan Monnier
2024-05-30 14:56               ` Eli Zaretskii
2024-05-30 15:12                 ` Stefan Monnier
2024-05-30 15:29                   ` Alan Mackenzie
2024-05-30 18:30                     ` Stefan Monnier
2024-05-30 16:06                   ` 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).