Subject: bug#64596: 30.0.50; On FIXME: in src/buffer.c:1481 (force-mode-line-update)

From: Stefan Monnier <[email-masked]>
Date: Sat, 15 Jul 2023 12:01:50 -0400

> But what happens in reality is that the breaking changes are made, and
> then the "guilty parties" disappear into thin air, or lose interest.
> And we are left with a broken redisplay and an unfinished project.

I didn't disappear into thin air, did I?

Maybe I shouldn't take this personally, but my `redisplay-bit` changes
are the only changes I'm aware of in this kind of vicinity, so I can't
help but feel that this experience is an important point of reference
for both of us.

>> That's eactly what happened when I introduced the 3 `redisplay` bits
>> above: it did introduce a few bugs, but overall it made the code
>> more clear.
> No, that's not "exactly" what happened.  Some of the bugs popped up
> much later, among other things.  I agree that the added comments made
> the situation better, but you know as well as I do that some of the
> aspects of those variables are still somewhat mysterious: specifically
> the meaning of windows_or_buffers_changed and update_mode_lines for
> disabling optimizations and shortcuts.  Which is exactly the focus of
> the current discussion.

Those aspects are not due to my changes.  If they are mysterious it's
because the remained mysterious, i.e. because I did not change them.

[ Actually, I did change them a bit to help track them down: I changed
  those vars from booleans to integers where the integer is a "code" for
  the place where it has been "mysteriously set".  And you can check
  `redisplay--all-windows-cause` and `redisplay--mode-lines-cause` to
  see how many times each of those "mysterious causes" has been
  used :-)  ]

This said, the meaning of those vars is clear, I think (they mean, that
all the windows/modelines need to be updated).
What still isn't clear at some places is the reason why they're set.

>> > and guess who gets to work on fixing them.
>> AFAIK, for the bugs introduced by those `redisplay` bit: I did, as
>> it should.
> Not all of them.

Admittedly, sometimes it's difficult to know beforehand whether the bug
may be due to those changes, so you may end up wasting your time before
you can redirect the bug to the appropriate person, but this is another
place where having that `internal--use-old-slow-redisplay` variable
would help.

        Stefan