Don't skip empty lines when fitting mini frame to buffer (Bug#44080)
* lisp/window.el (fit-mini-frame-to-buffer, window--resize-mini-frame, fit-frame-to-buffer, fit-frame-to-buffer-1): By default, fit a mini frame without skipping its buffer's leading or trailing empty lines. * src/frame.c (resize-mini-frames): Update doc-string. * lisp/cus-start.el (resize-mini-frames): Update for customize. * doc/lispref/minibuf.texi (resize-mini-frames): Update description.
This commit is contained in:
parent
a4ec03fa9b
commit
e0de9f3295
5 changed files with 36 additions and 8 deletions
|
@ -2445,8 +2445,10 @@ frame is the buffer whose contents will be shown the next time that
|
||||||
window is redisplayed. The function is expected to fit the frame to
|
window is redisplayed. The function is expected to fit the frame to
|
||||||
the buffer in some appropriate way.
|
the buffer in some appropriate way.
|
||||||
|
|
||||||
Any other non-@code{nil} value means to resize minibuffer-only frames
|
Any other non-@code{nil} value means to resize minibuffer-only frames by
|
||||||
by calling @code{fit-frame-to-buffer} (@pxref{Resizing Windows}).
|
calling @code{fit-mini-frame-to-buffer}, a function that behaves like
|
||||||
|
@code{fit-frame-to-buffer} (@pxref{Resizing Windows}) but does not strip
|
||||||
|
leading or trailing empty lines from the buffer text.
|
||||||
@end defopt
|
@end defopt
|
||||||
|
|
||||||
|
|
||||||
|
|
8
etc/NEWS
8
etc/NEWS
|
@ -32,6 +32,14 @@ applies, and please also update docstrings as needed.
|
||||||
|
|
||||||
This is a bug-fix release with no new features.
|
This is a bug-fix release with no new features.
|
||||||
|
|
||||||
|
|
||||||
|
* Lisp Changes in Emacs 27.2
|
||||||
|
|
||||||
|
*** The behavior of the user option 'resize-mini-frames' has changed.
|
||||||
|
If set to non-nil, resize the mini frame using the new function
|
||||||
|
'fit-mini-frame-to-buffer' which won't skip leading or trailing empty
|
||||||
|
lines of the buffer.
|
||||||
|
|
||||||
|
|
||||||
* Editing Changes in Emacs 27.2
|
* Editing Changes in Emacs 27.2
|
||||||
|
|
||||||
|
|
|
@ -317,9 +317,9 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of
|
||||||
(resize-mini-frames
|
(resize-mini-frames
|
||||||
frames (choice
|
frames (choice
|
||||||
(const :tag "Never" nil)
|
(const :tag "Never" nil)
|
||||||
(const :tag "Fit frame to buffer" t)
|
(const :tag "Fit mini frame to buffer" t)
|
||||||
(function :tag "User-defined function"))
|
(function :tag "User-defined function"))
|
||||||
"27.1")
|
"27.2")
|
||||||
(menu-bar-mode frames boolean nil
|
(menu-bar-mode frames boolean nil
|
||||||
;; FIXME?
|
;; FIXME?
|
||||||
;; :initialize custom-initialize-default
|
;; :initialize custom-initialize-default
|
||||||
|
|
|
@ -3406,7 +3406,7 @@ routines."
|
||||||
"Resize minibuffer-only frame FRAME."
|
"Resize minibuffer-only frame FRAME."
|
||||||
(if (functionp resize-mini-frames)
|
(if (functionp resize-mini-frames)
|
||||||
(funcall resize-mini-frames frame)
|
(funcall resize-mini-frames frame)
|
||||||
(fit-frame-to-buffer frame)))
|
(fit-mini-frame-to-buffer frame)))
|
||||||
|
|
||||||
(defun window--sanitize-window-sizes (horizontal)
|
(defun window--sanitize-window-sizes (horizontal)
|
||||||
"Assert that all windows on selected frame are large enough.
|
"Assert that all windows on selected frame are large enough.
|
||||||
|
@ -8762,6 +8762,14 @@ Return 0 otherwise."
|
||||||
|
|
||||||
(declare-function tool-bar-height "xdisp.c" (&optional frame pixelwise))
|
(declare-function tool-bar-height "xdisp.c" (&optional frame pixelwise))
|
||||||
|
|
||||||
|
(defun fit-mini-frame-to-buffer (&optional frame)
|
||||||
|
"Adjust size of minibuffer FRAME to display its contents.
|
||||||
|
FRAME should be a minibuffer-only frame and defaults to the
|
||||||
|
selected one. Unlike `fit-frame-to-buffer' FRAME will fit to the
|
||||||
|
contents of its buffer with any leading or trailing empty lines
|
||||||
|
included."
|
||||||
|
(fit-frame-to-buffer-1 frame))
|
||||||
|
|
||||||
(defun fit-frame-to-buffer (&optional frame max-height min-height max-width min-width only)
|
(defun fit-frame-to-buffer (&optional frame max-height min-height max-width min-width only)
|
||||||
"Adjust size of FRAME to display the contents of its buffer exactly.
|
"Adjust size of FRAME to display the contents of its buffer exactly.
|
||||||
FRAME can be any live frame and defaults to the selected one.
|
FRAME can be any live frame and defaults to the selected one.
|
||||||
|
@ -8780,8 +8788,18 @@ horizontally only.
|
||||||
The new position and size of FRAME can be additionally determined
|
The new position and size of FRAME can be additionally determined
|
||||||
by customizing the options `fit-frame-to-buffer-sizes' and
|
by customizing the options `fit-frame-to-buffer-sizes' and
|
||||||
`fit-frame-to-buffer-margins' or setting the corresponding
|
`fit-frame-to-buffer-margins' or setting the corresponding
|
||||||
parameters of FRAME."
|
parameters of FRAME.
|
||||||
|
|
||||||
|
Any leading or trailing empty lines of the buffer content are not
|
||||||
|
considered."
|
||||||
(interactive)
|
(interactive)
|
||||||
|
(fit-frame-to-buffer-1 frame max-height min-height max-width min-width only t t))
|
||||||
|
|
||||||
|
(defun fit-frame-to-buffer-1 (&optional frame max-height min-height max-width min-width only from to)
|
||||||
|
"Helper function for `fit-frame-to-buffer'.
|
||||||
|
FROM and TO are the buffer positions to determine the size to fit
|
||||||
|
to, see `window-text-pixel-size'. The remaining arguments are as
|
||||||
|
for `fit-frame-to-buffer'."
|
||||||
(unless (fboundp 'display-monitor-attributes-list)
|
(unless (fboundp 'display-monitor-attributes-list)
|
||||||
(user-error "Cannot resize frame in non-graphic Emacs"))
|
(user-error "Cannot resize frame in non-graphic Emacs"))
|
||||||
(setq frame (window-normalize-frame frame))
|
(setq frame (window-normalize-frame frame))
|
||||||
|
@ -8916,7 +8934,7 @@ parameters of FRAME."
|
||||||
;; Note: Currently, for a new frame the sizes of the header
|
;; Note: Currently, for a new frame the sizes of the header
|
||||||
;; and mode line may be estimated incorrectly
|
;; and mode line may be estimated incorrectly
|
||||||
(size
|
(size
|
||||||
(window-text-pixel-size window t t max-width max-height))
|
(window-text-pixel-size window from to max-width max-height))
|
||||||
(width (max (car size) min-width))
|
(width (max (car size) min-width))
|
||||||
(height (max (cdr size) min-height)))
|
(height (max (cdr size) min-height)))
|
||||||
;; Don't change height or width when the window's size is fixed
|
;; Don't change height or width when the window's size is fixed
|
||||||
|
|
|
@ -6204,7 +6204,7 @@ window of that frame is the buffer whose text will be eventually shown
|
||||||
in the minibuffer window.
|
in the minibuffer window.
|
||||||
|
|
||||||
Any other non-nil value means to resize minibuffer-only frames by
|
Any other non-nil value means to resize minibuffer-only frames by
|
||||||
calling `fit-frame-to-buffer'. */);
|
calling `fit-mini-frame-to-buffer'. */);
|
||||||
resize_mini_frames = Qnil;
|
resize_mini_frames = Qnil;
|
||||||
|
|
||||||
DEFVAR_LISP ("focus-follows-mouse", focus_follows_mouse,
|
DEFVAR_LISP ("focus-follows-mouse", focus_follows_mouse,
|
||||||
|
|
Loading…
Add table
Reference in a new issue