summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorClemens Radermacher <clemens.radermacher@posteo.de>2020-10-27 09:45:25 +0100
committerMartin Rudalics <rudalics@gmx.at>2020-10-27 09:45:25 +0100
commite0de9f3295b4c46cb7198ec0b9634809d7b7a36d (patch)
tree037230e7376754295dbcc4bd18ec99980d7eeda5 /lisp
parenta4ec03fa9be8315fba1be1658654be98643498ea (diff)
downloademacs-e0de9f3295b4c46cb7198ec0b9634809d7b7a36d.tar.gz
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.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/cus-start.el4
-rw-r--r--lisp/window.el24
2 files changed, 23 insertions, 5 deletions
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 6632687da47..1d344893a5a 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -317,9 +317,9 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of
(resize-mini-frames
frames (choice
(const :tag "Never" nil)
- (const :tag "Fit frame to buffer" t)
+ (const :tag "Fit mini frame to buffer" t)
(function :tag "User-defined function"))
- "27.1")
+ "27.2")
(menu-bar-mode frames boolean nil
;; FIXME?
;; :initialize custom-initialize-default
diff --git a/lisp/window.el b/lisp/window.el
index 7b75495ad84..48005fc93e0 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -3406,7 +3406,7 @@ routines."
"Resize minibuffer-only frame FRAME."
(if (functionp resize-mini-frames)
(funcall resize-mini-frames frame)
- (fit-frame-to-buffer frame)))
+ (fit-mini-frame-to-buffer frame)))
(defun window--sanitize-window-sizes (horizontal)
"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))
+(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)
"Adjust size of FRAME to display the contents of its buffer exactly.
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
by customizing the options `fit-frame-to-buffer-sizes' and
`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)
+ (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)
(user-error "Cannot resize frame in non-graphic Emacs"))
(setq frame (window-normalize-frame frame))
@@ -8916,7 +8934,7 @@ parameters of FRAME."
;; Note: Currently, for a new frame the sizes of the header
;; and mode line may be estimated incorrectly
(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))
(height (max (cdr size) min-height)))
;; Don't change height or width when the window's size is fixed