diff --git a/lisp/window.el b/lisp/window.el index af35f9abe6..7470ffc1d3 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -5365,10 +5365,22 @@ split-window-below (let ((old-window (selected-window)) (old-point (window-point)) (size (and size (prefix-numeric-value size))) - moved-by-window-height moved new-window bottom) - (when (and size (< size 0) (< (- size) window-min-height)) + line-height moved-by-window-height moved new-window bottom) + (cond + ((and size (< size 0) (< (- size) window-min-height)) ;; `split-window' would not signal an error here. (error "Size of new window too small")) + ((and (not size) + (< (setq line-height (window-default-line-height)) + (frame-char-height)) + (>= (/ (float (window-size nil nil t)) line-height) + window-min-height)) + ;; As a special case when SIZE is not specified and the + ;; selected window has a default line height that is smaller + ;; than the character height of its frame, try to split the + ;; window even if the resulting windows would otherwise + ;; violate the `window-min-height' contstraints (Bug#14825). + (setq size (/ (window-size) 2)))) (setq new-window (split-window nil size)) (unless split-window-keep-point (with-current-buffer (window-buffer)