GNU bug report logs - #78418
31.0.50; Change in fit-frame-to-buffer doesn't work with transient-posframe

Previous Next

Package: emacs;

Reported by: Gerd Möllmann <gerd.moellmann <at> gmail.com>

Date: Wed, 14 May 2025 07:22:01 UTC

Severity: normal

Found in version 31.0.50

Full log


View this message in rfc822 format

From: Gerd Möllmann <gerd.moellmann <at> gmail.com>
To: martin rudalics <rudalics <at> gmx.at>
Cc: yhaoxie <at> gmail.com, 78418 <at> debbugs.gnu.org
Subject: bug#78418: 31.0.50; Change in fit-frame-to-buffer doesn't work with transient-posframe
Date: Wed, 14 May 2025 13:59:05 +0200
Gerd Möllmann <gerd.moellmann <at> gmail.com> writes:

> martin rudalics <rudalics <at> gmx.at> writes:
>
>>  >> what are the values of 'text-minus-body-height' and 'char-height' when
>>  >> the problem happens?
>>  >>
>>  >> martin
>>  >
>>  > text-minus-body-height 0, char-height 1
>>
>> Thanks.  Silly thinko then and the below should fix it.
>>
>> martin
>>
>> diff --git a/lisp/window.el b/lisp/window.el
>> index e0e626e9500..e372ef8b9bb 100644
>> --- a/lisp/window.el
>> +++ b/lisp/window.el
>> @@ -10153,14 +10153,14 @@ fit-frame-to-buffer-1
>>   	;; this may cause lines getting wrapped.  To avoid that, round
>>   	;; sizes up here which will, however, leave a blank space at the
>>   	;; end of the longest line(s).
>> -	(setq text-minus-body-width
>> -	      (+ text-minus-body-width
>> -		 (- char-width
>> -		    (% text-minus-body-width char-width))))
>> -	(setq text-minus-body-height
>> -	      (+ text-minus-body-height
>> -		 (- char-height
>> -		    (% text-minus-body-height char-height)))))
>> +	(let ((remainder (% text-minus-body-width char-width)))
>> +	  (unless (zerop remainder)
>> +	    (setq text-minus-body-width
>> +		  (+ text-minus-body-width (- char-width remainder)))))
>> +	(let ((remainder (% text-minus-body-height char-height)))
>> +	  (unless (zerop remainder)
>> +	    (setq text-minus-body-height
>> +		  (+ text-minus-body-height(- char-height remainder))))))
>>         (setq text-width
>>               (if width
>>                   (+ width text-minus-body-width)
>
> Thanks, that fixes the tty case, but on the GUI it still looks like in
> the screen shot I sent. With
>
> modified   lisp/window.el
> @@ -10158,6 +10158,8 @@ fit-frame-to-buffer-1
>  	    (setq text-minus-body-width
>  		  (+ text-minus-body-width (- char-width remainder)))))
>  	(let ((remainder (% text-minus-body-height char-height)))
> +          (message "remainder %S text-minus-body-height %S char-height %S"
> +                   remainder text-minus-body-height char-height)
>  	  (unless (zerop remainder)
>  	    (setq text-minus-body-height
>  		  (+ text-minus-body-height(- char-height remainder))))))
>
> it says
>
> remainder 0 text-minus-body-height 0 char-height 18

When I invoke a transient in the GUI, and with this diff

1 file changed, 6 insertions(+)
lisp/window.el | 6 ++++++

modified   lisp/window.el
@@ -10126,9 +10126,11 @@ fit-frame-to-buffer-1
             (setq left left-margin)))))
       ;; Fit height to constraints.
       (when height
+        (message "1: height %S" height)
         (unless frame-resize-pixelwise
           (setq height (* (/ (+ height char-height -1) char-height)
                           char-height)))
+        (message "2: height %S" height)
         ;; The new outer height.
         (setq outer-height (+ height outer-minus-body-height))
         ;; Preserve margins.
@@ -10158,6 +10160,8 @@ fit-frame-to-buffer-1
 	    (setq text-minus-body-width
 		  (+ text-minus-body-width (- char-width remainder)))))
 	(let ((remainder (% text-minus-body-height char-height)))
+          (message "remainder %S text-minus-body-height %S char-height %S"
+                   remainder text-minus-body-height char-height)
 	  (unless (zerop remainder)
 	    (setq text-minus-body-height
 		  (+ text-minus-body-height(- char-height remainder))))))
@@ -10165,6 +10169,8 @@ fit-frame-to-buffer-1
             (if width
                 (+ width text-minus-body-width)
               (frame-text-width frame)))
+      (message "height %S text-minus-body-height %S"
+               height text-minus-body-height)
       (setq text-height
             (if height
                 (+ height text-minus-body-height)

I see that the function is apparently called twice? And the output is

1: height 199
2: height 199
height 199 text-minus-body-height 0
1: height 199
2: height 216
remainder 0 text-minus-body-height 0 char-height 18
height 216 text-minus-body-height 0

Maybe the second '2:...' is what increases the frame size?




This bug report was last modified 86 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.