branch: elpa/dirvish
commit 4c78097248597cbf93374190204aeaf89a18e510
Author: Alex Lu <hellosimon1...@hotmail.com>
Commit: Alex Lu <hellosimon1...@hotmail.com>

    fix(core): prevent mode-line got cut off in fullframe state
    
    The *window-safe-min-height* and *window-resize-pixelwise* usage here is 
pretty
    hacky, so this might be removed in the future.
---
 dirvish.el | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/dirvish.el b/dirvish.el
index 0257310150..277c11f0a1 100644
--- a/dirvish.el
+++ b/dirvish.el
@@ -994,6 +994,11 @@ If HEADER, the format is used for `header-line-format'."
                                             ,(ceiling (* scale len-r))))))
         str-r)))))
 
+(defun dirvish--mode-line-height (fullframe &optional header)
+  "Get mode/header-line (when HEADER) height in single pane or FULLFRAME."
+  (let ((hv (if header dirvish-header-line-height dirvish-mode-line-height)))
+    (cond ((numberp hv) hv) (fullframe (cdr hv)) (t (car hv)))))
+
 ;; Thanks to `doom-modeline'.
 (defun dirvish--mode-line-bar-img (fullframe-p header)
   "Create a bar image with height of `dirvish-mode-line-height'.
@@ -1001,9 +1006,8 @@ If FULLFRAME-P, use the `cdr' of the value as height, 
otherwise
 use `car'.  If HEADER, use `dirvish-header-line-height' instead."
   (when (and (display-graphic-p) (image-type-available-p 'pbm)
              (numberp dirvish-mode-line-bar-image-width))
-    (let* ((hv (if header dirvish-header-line-height dirvish-mode-line-height))
-           (ht (cond ((numberp hv) hv) (fullframe-p (cdr hv)) (t (car hv))))
-           (wd dirvish-mode-line-bar-image-width))
+    (let ((ht (dirvish--mode-line-height fullframe-p header))
+          (wd dirvish-mode-line-bar-image-width))
       (propertize
        " " 'display
        (ignore-errors
@@ -1351,7 +1355,10 @@ Dirvish sets `revert-buffer-function' to this function."
                            (window-parameters . ((no-other-window . t))))
                    (footer (side . below) (window-height . -2)
                            (window-parameters . ((no-other-window . t))))))
-         (w-order (and layout (dirvish--window-split-order))) util-windows)
+         (w-order (and layout (dirvish--window-split-order)))
+         (window-safe-min-height 0) (window-resize-pixelwise t)
+         (lh (line-pixel-height)) (gui? (display-graphic-p))
+         (mh (dirvish--mode-line-height t)) (hh (dirvish--mode-line-height t 
t)))
     (setf (dv-index dv) (cons (dirvish-prop :root) (current-buffer)))
     ;; only record window config before creating fullframe layout
     (setf (dv-winconf dv) (when layout (or conf 
(current-window-configuration))))
@@ -1369,13 +1376,12 @@ Dirvish sets `revert-buffer-function' to this function."
       (let* ((buf (dirvish--special-buffer pane dv (eq pane 'preview)))
              (args (alist-get pane w-args))
              (win (display-buffer buf `(dirvish--display-buffer . ,args))))
-        (cond ((eq pane 'preview) (setf (dv-preview-window dv) win))
-              (t (set-window-dedicated-p win t) (push win util-windows)))
+        (pcase pane
+          ('preview (setf (dv-preview-window dv) win))
+          ('header (when (and gui? (> hh lh)) (fit-window-to-buffer win 2 1)))
+          ('footer (when (and gui? (> mh lh)) (fit-window-to-buffer win 2 1))))
         (set-window-buffer win buf)))
     (dirvish--create-parent-windows dv)
-    (when (and (display-graphic-p) (> emacs-major-version 28))
-      (let ((window-safe-min-height 0) (window-resize-pixelwise t))
-        (dolist (win util-windows) (fit-window-to-buffer win 2 1))))
     (unless (dirvish-prop :cached)
       (dirvish--dir-data-async default-directory (current-buffer))
       (dirvish-prop :cached t))

Reply via email to