bug-gnu-emacs
[Top][All Lists]
Advanced

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

bug#38181: Actual height of mode-line not taken into account


From: martin rudalics
Subject: bug#38181: Actual height of mode-line not taken into account
Date: Sat, 16 Nov 2019 20:30:11 +0100

> Again, the mode-line-prettifiers are not the ones who create new buffers
> and then call fit-buffer-to-window.  It's arbitrary other packages that
> do that.  An optional argument therefore would not help because when one
> of the prettifier modes is active, then each and every third-party
> caller of fit-buffer-to-window would have to pass that optional
> argument.

I see.  Maybe a function 'set-default-mode-line-format' would be
useful here.  Anyway: At the time you prettify a mode line or show a
new buffer in a window with a to be prettified mode line, would doing
an immediate redisplay work around future problems?

> This is the advice I currently use:
>
> (defvar-local moody--size-hacked-p nil)
>
> (defun moody-redisplay (&optional _force &rest _ignored)
>    (unless moody--size-hacked-p
>      (setq moody--size-hacked-p t)
>      (redisplay t)))
>
> (advice-add 'fit-window-to-buffer :before #'moody-redisplay)
>
> Of course fit-buffer-to-window itself could be changed to do that and it
> could also be taught to only do so iff the user opted in to doing it.

If we don't want 'fit-window-to-buffer' to do that always we'd need
some variable, either buffer local or even a window parameter, that
'fit-window-to-buffer' would inspect once and reset immediately in
order to perform only the redisplay call that's really needed.

> Creating and displaying a new buffer and creating and resizing a new
> window surely *already* causes a "redisplay" without the programmer
> having to explicitly call `redisplay'.  So if we explicitly tell
> fit-window-to-buffer to redisplay, then that means that we are
> redisplaying twice, right?

I think so.  Maybe 'fit-window-to-buffer' could use the string
returned by 'format-mode-line' instead and calculate its height
without redisplaying anything.

martin





reply via email to

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