diff --git a/lisp/window.el b/lisp/window.el index a6cdd4dec2..c09d9532e3 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -5543,10 +5543,12 @@ split-window-below Otherwise, the window starts are chosen so as to minimize the amount of redisplay; this is convenient on slow terminals." (interactive "P") - (let ((old-window (selected-window)) - (old-point (window-point)) - (size (and size (prefix-numeric-value size))) - moved-by-window-height moved new-window bottom) + (let* ((old-window (selected-window)) + (old-point (window-point)) + (size (and size (prefix-numeric-value size))) + (quit-restore (window-parameter old-window 'quit-restore)) + (quad (nth 1 quit-restore)) + moved-by-window-height moved new-window bottom) (when (and size (< size 0) (< (- size) window-min-height)) ;; `split-window' would not signal an error here. (error "Size of new window too small")) @@ -5574,10 +5576,18 @@ split-window-below (<= (window-start new-window) old-point) (set-window-point new-window old-point) (select-window new-window)))) - ;; Always copy quit-restore parameter in interactive use. - (let ((quit-restore (window-parameter old-window 'quit-restore))) - (when quit-restore - (set-window-parameter new-window 'quit-restore quit-restore))) + + (when quit-restore + (when (and (listp quad) (integerp (nth 3 quad))) + ;; nth 3 of quad is the old-window height of OLD-WINDOW. This + ;; value is meaningless in NEW-WINDOW so set it to the present + ;; height of NEW-WINDOW. + (setq quit-restore (copy-tree quit-restore)) + (rplaca (cdddr (nth 1 quit-restore)) + (window-total-height new-window))) + + (set-window-parameter new-window 'quit-restore quit-restore)) + new-window)) (defalias 'split-window-vertically 'split-window-below) @@ -6440,9 +6450,7 @@ display-buffer-record-window ;; Preserve window-point-insertion-type (Bug#12855). (copy-marker (window-point window) window-point-insertion-type) - (if (window-combined-p window) - (window-total-height window) - (window-total-width window))) + (window-total-height window)) (selected-window) buffer))))) ((eq type 'window) ;; WINDOW has been created on an existing frame.