Function: dirvish--build-layout

dirvish--build-layout is a natively compiled function defined in dirvish.el.

Signature

(dirvish--build-layout DV)

Documentation

Build layout for Dirvish session DV.

Source Code

;; Defined in /nix/store/1gijwny2yx4fggrsb9l110h1ybs1gdk5-emacs-packages-deps/share/emacs/site-lisp/elpa/dirvish-20260725.1520/dirvish.el
(defun dirvish--build-layout (dv)
  "Build layout for Dirvish session DV."
  (let* ((layout (dv-curr-layout dv)) (conf (dv-winconf dv))
         (w-args `((preview (side . right) (window-width . ,(nth 2 layout)))
                   (header (side . above) (window-height . -2)
                           (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)))
         (window-safe-min-height 0) (window-resize-pixelwise t)
         (lh (line-pixel-height)) (gui? (display-graphic-p)) sf
         (mh (dirvish--mode-line-height t)) (hh (dirvish--mode-line-height t t)))
    (setf (dv-index dv) (cons (dirvish-prop :root) (current-buffer)))
    ;; only refresh window config before creating fullframe layout
    (setf (dv-winconf dv) (when layout (or conf (current-window-configuration))))
    (and (not layout) (setq sf (dv-size-fixed dv)) (setq window-size-fixed sf))
    (when layout (dirvish--init-special-buffers dv))
    (dirvish--setup-mode-line dv)
    (when w-order (let ((ignore-window-parameters t)) (delete-other-windows)))
    (when (or (dv-curr-layout dv) (dv-dedicated dv))
      (set-window-dedicated-p nil t))
    ;; ensure a positive fringe on both sides for `dirvish-subtree' (#311)
    (set-window-fringes nil (1+ dirvish-window-fringe) 1)
    (dolist (pane w-order)
      (let* ((buf (dirvish--special-buffer pane dv (eq pane 'preview)))
             (args (alist-get pane w-args))
             (win (display-buffer buf `(dirvish--display-buffer . ,args))))
        (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))))
        (unless (eq pane 'preview) (set-window-dedicated-p win t))
        (set-window-buffer win buf)))
    (dirvish--create-parent-windows dv)
    (dirvish--run-with-delay 'reset) ; preview initialization
    (dirvish--maybe-toggle-cursor)
    (dirvish--maybe-toggle-details)))