Function: vertico-buffer--setup

vertico-buffer--setup is a byte-compiled function defined in vertico-buffer.el.

Signature

(vertico-buffer--setup)

Documentation

Setup buffer display.

Source Code

;; Defined in ~/.emacs.d/elpa/vertico-20260811.1003/vertico-buffer.el
(defun vertico-buffer--setup ()
  "Setup buffer display."
  (let* ((action vertico-buffer-display-action)
         (old-wins (mapcar (lambda (w) (cons w (window-buffer w))) (window-list)))
         win old-buf tmp-buf
         (_ (unwind-protect
                (progn
                  (with-current-buffer
                      (setq tmp-buf (generate-new-buffer "*vertico-buffer*"))
                    ;; Set a fake major mode such that
                    ;; `display-buffer-reuse-mode-window' does not take over!
                    (setq major-mode 'vertico-buffer-mode))
                  ;; Temporarily select the original window such that
                  ;; `display-buffer-same-window' works.
                  (setq win (with-minibuffer-selected-window
                              (display-buffer tmp-buf action))
                        old-buf (alist-get win old-wins))
                  (set-window-buffer win (current-buffer)))
              (kill-buffer tmp-buf)))
         (old-no-other (window-parameter win 'no-other-window))
         (old-no-delete (window-parameter win 'no-delete-other-windows))
         (old-state (buffer-local-set-state
                     cursor-in-non-selected-windows cursor-in-non-selected-windows
                     show-trailing-whitespace nil
                     truncate-lines t
                     face-remapping-alist (copy-tree `((mode-line-inactive mode-line)
                                                       ,@face-remapping-alist))
                     mode-line-format
                     (when mode-line-format ;; Do not override if nil
                       (list (format  #(" %s%s " 1 3 (face mode-line-buffer-id))
                                      (replace-regexp-in-string ":? *\\'" ""
                                                                (minibuffer-prompt))
                                      (let ((depth (recursion-depth)))
                                        (if (< depth 2) "" (format " [%s]" depth))))))
                     vertico-count (- (/ (window-pixel-height win)
                                         (default-line-height))
                                      (if mode-line-format 2 1)))))
    (set-window-parameter win 'no-other-window t)
    (set-window-parameter win 'no-delete-other-windows t)
    (set-window-dedicated-p win t)
    (overlay-put vertico--candidates-ov 'window win)
    (when (and vertico-buffer-hide-prompt vertico--count-ov)
      (overlay-put vertico--count-ov 'window win))
    (setq-local vertico-buffer--restore (make-symbol "vertico-buffer--restore"))
    (fset vertico-buffer--restore
          (lambda ()
            (with-selected-window (active-minibuffer-window)
              (when vertico-buffer--restore
                (when transient-mark-mode
                  (with-silent-modifications
                    (vertico--remove-face (point-min) (point-max) 'region)))
                (remove-hook 'pre-redisplay-functions #'vertico-buffer--redisplay 'local)
                (remove-hook 'minibuffer-exit-hook vertico-buffer--restore 'local)
                (fset vertico-buffer--restore nil)
                (kill-local-variable 'vertico-buffer--restore)
                (buffer-local-restore-state old-state)
                (overlay-put vertico--candidates-ov 'window nil)
                (when vertico--count-ov (overlay-put vertico--count-ov 'window nil))
                (cond
                 ((and (window-live-p win) (buffer-live-p old-buf))
                  (set-window-parameter win 'no-other-window old-no-other)
                  (set-window-parameter win 'no-delete-other-windows old-no-delete)
                  (set-window-dedicated-p win nil)
                  (set-window-buffer win old-buf))
                 ;; Check `window-parent' since the window may be a sole window
                 ;; (gh:minad/vertico#496).
                 ((and (window-live-p win) (window-parent win))
                  (delete-window win)))
                (when vertico-buffer-hide-prompt
                  (set-window-vscroll nil 0))))))
    (add-hook 'minibuffer-exit-hook vertico-buffer--restore nil 'local)
    (add-hook 'pre-redisplay-functions #'vertico-buffer--redisplay nil 'local)))