Subject: bug#32839: 27.0.50; recenter doesn't redisplay

From: Eli Zaretskii <[email-masked]>
Date: Sun, 30 Sep 2018 09:08:20 +0300

> From: Juri Linkov <[email-masked]>
> Cc: [email-masked]
> Date: Sun, 30 Sep 2018 02:32:57 +0300
> 
> I see that before the recent changes, on a TTY 'C-l' and
> all non-interactive calls of 'recenter' cleared the frame,
> but now only interactive calls of 'recenter' redraw the frame.

More or less, yes.  There's still a way to call 'recenter'
non-interactively in a way that will cause the frame to be redrawn,
but it needs a special arrangement.

> OTOH, what I'm trying to achieve here is to allow C-l with a non-nil
> argument to refresh the *Messages* buffer when recenter-redisplay is t.

That's not C-l's purpose, so IMO you are using the wrong tool for the
job.

> An additional problem is that when 'recenter-positions' is customized
> to not contain the keyword 'middle', then 'recenter-top-bottom' never
> uses a nil arg of 'recenter', thus never redraws the frame.

Again, it is not recenter-redisplay's purpose to redraw the frame.  If
you want to redraw the frame, there's a command for that (and much
more): redraw-display.  There's also a function redraw-frame.

> But since redrawing a frame causes flickering, I'm not interested
> in setting recenter-redisplay to t.  So I could implement more
> fundamental changes for this only if you insist.

I don't think any changes are necessary, because the functions
mentioned all work as intended.  I'm not interested in making the
complex arrangement we already have even more complex.  It is already
quite an unholy mess.

> However, a minimal change that is needed here is to fix inconsistencies
> in the recent changes: the argument name 'redisplay' is confusing -
> it implies that it overrides the default value of recenter-redisplay
> to force the redisplay.  A proper name would be 'interactive'.
> There are dozens of commands already that use this naming convention.

I don't think I agree.  The current name reflects what that argument
causes, you just interpret "redisplay" to mean "redraw the frame",
which is not an accurate interpretation, since the display engine has
its own logic to decide what exactly needs to be redrawn at any
particular moment.

Renaming the argument as you propose would be a step backwards, since
it describes the _purpose_ (as opposed to _effect_) of that argument,
and that could easily change with further development, and is not
accurate even with the current code.