unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Phil Sainty <psainty@orcon.net.nz>
To: Alan Mackenzie <acm@muc.de>
Cc: 2034@debbugs.gnu.org,
	bug-gnu-emacs
	<bug-gnu-emacs-bounces+psainty=orcon.net.nz@gnu.org>
Subject: bug#2034: [PATCH] 27.0.50; Support mode line constructs for `mode-name' in c-mode
Date: Thu, 05 Jul 2018 09:13:38 +1200	[thread overview]
Message-ID: <6151a9339904bddb78507bc20d8484d6@webmail.orcon.net.nz> (raw)
In-Reply-To: <20180704201150.74826.qmail@mail.muc.de>

Hi Alan,

On 2018-07-05 08:11, Alan Mackenzie wrote:
> But I must confess, I'm not filled with enthusiasm by this change.  
> What
> is the problem it is fixing?  The original problem (use of a CC Mode
> command by a non CC Mode mode) went away when cc-subword.el became just
> subword-mode.

I believe the original problem was the same as the problem I'm aiming to 
fix,
which is that `c-update-modeline' imposes a non-standard restriction 
upon
`mode-name' that it be a simple string (as opposed to containing 
arbitrary
mode line constructs, as it should be able to do).

It seems that the original symptom of the problem in this bug report 
went
away as a side-effect of the change to subword-mode, but the bug itself
remained.

`c-update-modeline' even contains a "FIXME" comment about it:

         ;; FIXME: Derived modes might want to use something else
         ;; than a string for `mode-name'.

> This change introduces complexity, even if, perhaps, not very much.  Do
> we really need a buffer local variable for the display of these flags?
> (That's a real question, not a rhetorical one.)  It seems to be 
> inviting
> misuse, given that it prevails for ever, but is really only valid for
> the short time between it being calculated and the mode line being
> displayed.

In the current version of the patch, the buffer-local variable is used 
every
time the mode line is rendered, as the variable *symbol* is incorporated 
into
`mode-name'.  However Stefan made the suggestion that the flags 
themselves
could become a list of mode line constructs, which would then mean it 
could
be a global value rather than a buffer-local one, as each buffer would 
render
that single construct into the appropriate flags for its own buffer.


>     +(defvar-local c-modeline-flags-major-modes-processed nil
>     +  "Major modes for which `c-update-modeline' has processed 
> `mode-name'.
> 
> .... seems confused.

That was a mistake on my part, and I was intending to change it from a 
list
to a single value record of the most recent `major-mode' to be 
processed.

The reason for having a record in the first place is that a major mode 
which
is *derived* from, say, `c-mode' can trigger `c-update-modeline' 
repeatedly
with different values for `major-mode', and if we see a *new* 
`major-mode'
value then `mode-name' will also have been reset (to a string, in the 
existing
cases), and needs to be processed again, as each major mode body resets
`mode-name'.

i.e. We need to process `mode-name' exactly once for whatever the final
major mode is.

Something like: (unless (eq major-mode c-modeline-major-mode)...), with
buffer-local `c-modeline-major-mode' then set to the value of 
`major-mode'.


> I'm rather sceptical about
> 
>     (setq mode-name (list mode-name .....
> 
> , which is just screaming out for an unbounded appending of other
> things, many times over, if anything goes wrong with the enclosing
> `unless' form. What happens to it when the major mode is changed?

Hopefully you find the aforementioned proposed change less concerning.


> Would it not be possible, somehow, either to leave mode-name 
> unmolested,
> or calculate it unrecursively when needed?

Not that I can think of.  AFAIK using mode line constructs in 
`mode-name'
is exactly how these kinds of things are supposed to be done.


> As a final point, how is the backward compatibility of this change?  
> How
> many former Emacsen will it work in?

I've not checked.  I think these mode line constructs have been stable 
for
a long time?  If a new third-party derived mode was written to have a 
fancy
`mode-name' then obviously that would only work with an Emacs version 
which
contained these changes.  I'm not sure what you're getting at here, 
though...
Are you saying that people will use newer cc-mode code with older 
emacsen?
I can do some testing if I know what the use-case is.


-Phil






  reply	other threads:[~2018-07-04 21:13 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <8cbpgkqwkt.fsf@fencepost.gnu.org>
2009-01-25  2:10 ` bug#2034: 23.0.60; c-subword-mode incompatible with xml-mode me
2009-01-25 15:44   ` Stefan Monnier
2009-01-25 18:48     ` Ross Patterson
2010-01-23 22:36   ` bug#2034: marked as done (23.0.60; c-subword-mode incompatible with xml-mode) Emacs bug Tracking System
2018-07-02 12:40   ` bug#2034: [PATCH] 27.0.50; Support mode line constructs for `mode-name' in c-mode Phil Sainty
2018-07-02 15:29     ` Eli Zaretskii
2018-07-02 22:53       ` Phil Sainty
2018-07-03 13:37         ` Phil Sainty
2018-07-04  2:41         ` Eli Zaretskii
     [not found]   ` <mailman.3006.1530625089.1292.bug-gnu-emacs@gnu.org>
2018-07-04 20:11     ` Alan Mackenzie
2018-07-04 21:13       ` Phil Sainty [this message]
2018-07-08  2:46         ` Phil Sainty
2018-07-08 20:08         ` Alan Mackenzie
2018-07-09 14:47           ` Phil Sainty

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6151a9339904bddb78507bc20d8484d6@webmail.orcon.net.nz \
    --to=psainty@orcon.net.nz \
    --cc=2034@debbugs.gnu.org \
    --cc=acm@muc.de \
    --cc=bug-gnu-emacs-bounces+psainty=orcon.net.nz@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).