diff --git a/doc/lispref/windows.texi b/doc/lispref/windows.texi index e070e84c67..6a6c91e356 100644 --- a/doc/lispref/windows.texi +++ b/doc/lispref/windows.texi @@ -1151,10 +1151,12 @@ Resizing Windows its buffer exactly. @var{frame} can be any live frame and defaults to the selected one. Fitting is done only if @var{frame}'s root window is live. The arguments @var{max-height}, @var{min-height}, @var{max-width} -and @var{min-width} specify bounds on the new total size of -@var{frame}'s root window. @var{min-height} and @var{min-width} default -to the values of @code{window-min-height} and @code{window-min-width} -respectively. +and @var{min-width}, if non-@code{nil}, specify bounds on the new body +size of @var{frame}'s root window. @var{min-height} and @var{min-width} +default to the values of @code{window-safe-min-height} and +@code{window-safe-min-width} respectively. A non-@code{nil} value +specified by any of these arguments overrides the corresponding value +specified by @code{fit-frame-to-buffer-sizes}. If the optional argument @var{only} is @code{vertically}, this function may resize the frame vertically only. If @var{only} is @@ -1179,10 +1181,10 @@ Resizing Windows @defopt fit-frame-to-buffer-sizes This option specifies size boundaries for @code{fit-frame-to-buffer}. -It specifies the total maximum and minimum lines and maximum and minimum -columns of the root window of any frame that shall be fit to its buffer. -If any of these values is non-@code{nil}, it overrides the corresponding -argument of @code{fit-frame-to-buffer}. +It specifies the maximum and minimum lines and maximum and minimum +columns of the root window's body of any frame that shall be fit to its +buffer. Any value this option specifies will be overridden by the +corresponding argument of @code{fit-frame-to-buffer}, if non-@code{nil}. @end defopt @deffn Command shrink-window-if-larger-than-buffer &optional window diff --git a/lisp/window.el b/lisp/window.el index a47a1216d1..cb59adc428 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -9053,10 +9053,11 @@ fit-frame-to-buffer-margins (defcustom fit-frame-to-buffer-sizes '(nil nil nil nil) "Size boundaries of frame for `fit-frame-to-buffer'. -This list specifies the total maximum and minimum lines and -maximum and minimum columns of the root window of any frame that -shall be fit to its buffer. If any of these values is non-nil, -it overrides the corresponding argument of `fit-frame-to-buffer'. +This list specifies the total maximum and minimum numbers of +lines and the maximum and minimum numbers of columns of the body +of the root window of any frame that shall be fit to its buffer. +Any value specified by ths variable will be overridden by the +corresponding argument of `fit-frame-to-buffer', if non-nil. On window systems where the menubar can wrap, fitting a frame to its buffer may swallow the last line(s). Specifying an @@ -9252,30 +9253,30 @@ fit-frame-to-buffer-1 (t parent-or-display-height)) ;; The following is the maximum height that fits into the ;; top and bottom margins. - (max (- bottom-margin top-margin outer-minus-body-height)))) + (max (- bottom-margin top-margin outer-minus-body-height) 0))) (min-height (cond ((numberp min-height) (* min-height line-height)) ((numberp (nth 1 sizes)) (* (nth 1 sizes) line-height)) - (t (window-min-size window nil nil t)))) + (t (window-safe-min-size window nil t)))) (max-width - (min - (cond - ((numberp max-width) (* max-width char-width)) - ((numberp (nth 2 sizes)) (* (nth 2 sizes) char-width)) - (t parent-or-display-width)) - ;; The following is the maximum width that fits into the - ;; left and right margins. - (max (- right-margin left-margin outer-minus-body-width)))) + (unless (eq only 'vertically) + (min + (cond + ((numberp max-width) (* max-width char-width)) + ((numberp (nth 2 sizes)) (* (nth 2 sizes) char-width)) + (t parent-or-display-width)) + ;; The following is the maximum width that fits into the + ;; left and right margins. + (max (- right-margin left-margin outer-minus-body-width) 0)))) (min-width (cond ((numberp min-width) (* min-width char-width)) - ((numberp (nth 3 sizes)) (nth 3 sizes)) - (t (window-min-size window t nil t)))) + ((numberp (nth 3 sizes)) (* (nth 3 sizes) char-width)) + (t (window-safe-min-size window t t)))) ;; Note: Currently, for a new frame the sizes of the header ;; and mode line may be estimated incorrectly - (size - (window-text-pixel-size window from to max-width max-height)) + (size (window-text-pixel-size window from to max-width max-height)) (width (max (car size) min-width)) (height (max (cdr size) min-height))) ;; Don't change height or width when the window's size is fixed