Function: consult--temporary-files
consult--temporary-files is a byte-compiled function defined in
consult.el.
Signature
(consult--temporary-files)
Documentation
Return a function to open files temporarily for preview.
Source Code
;; Defined in ~/.emacs.d/elpa/consult-20260805.1130/consult.el
(defun consult--temporary-files ()
"Return a function to open files temporarily for preview."
(let ((dir default-directory)
(hook (make-symbol "consult--temporary-files-upgrade"))
(orig-buffers (buffer-list))
temporary-buffers)
(fset hook
(lambda (_)
;; Fully initialize previewed files and keep them alive.
(unless (consult--completion-window-p)
(let (live-files)
(pcase-dolist (`(,file . ,buf) temporary-buffers)
(when-let* ((wins (and (buffer-live-p buf)
(get-buffer-window-list buf))))
(push (cons file (mapcar
(lambda (win)
(cons win (window-state-get win t)))
wins))
live-files)))
(pcase-dolist (`(,_ . ,buf) temporary-buffers)
(kill-buffer buf))
(setq temporary-buffers nil)
(pcase-dolist (`(,file . ,wins) live-files)
(when-let* ((buf (consult--file-action file)))
(push buf orig-buffers)
(pcase-dolist (`(,win . ,state) wins)
(setf (car (alist-get 'buffer state)) buf)
(window-state-put state win))))))))
(lambda (&optional name)
(if name
(let ((default-directory dir))
(setq name (let (file-name-handler-alist)
(abbreviate-file-name (expand-file-name name))))
(or
;; Find existing fully initialized buffer (non-previewed). We have
;; to check for fully initialized buffer before accessing the
;; previewed buffers, since `embark-act' can open a buffer which is
;; currently previewed, such that we end up with two buffers for
;; the same file - one previewed and only partially initialized and
;; one fully initialized. In this case we prefer the fully
;; initialized buffer. For directories `get-file-buffer' returns nil,
;; therefore we have to special case Dired.
(let (file-name-handler-alist)
(if (and (fboundp 'dired-find-buffer-nocreate) (file-directory-p name))
(dired-find-buffer-nocreate name)
(get-file-buffer name)))
;; Find existing previewed buffer. Previewed buffers are not fully
;; initialized (hooks are delayed) in order to ensure fast preview.
(cdr (assoc name temporary-buffers))
;; If no existing buffer has been found, open the file for preview.
(when-let* (((not (seq-find (lambda (x) (string-match-p x name))
consult-preview-excluded-files)))
(buf (consult--find-file-temporarily name)))
;; Only add new buffer if not already in the list
(unless (or (rassq buf temporary-buffers) (memq buf orig-buffers))
(add-hook 'window-selection-change-functions hook)
(cl-callf consult--preview-add-buffer temporary-buffers
(cons name buf) (file-name-nondirectory (directory-file-name name)))
;; Disassociate buffer from file by setting `buffer-file-name'
;; and `dired-directory' to nil. This lets us open an already
;; previewed buffer with the Embark default action C-. RET.
;; The buffer disassociation is delayed to avoid breaking modes
;; like `pdf-view-mode' or `doc-view-mode' which rely on
;; `buffer-file-name'. Executing (set-visited-file-name nil)
;; early also prevents the major mode initialization.
(let ((hook (make-symbol "consult--temporary-files-disassociate")))
(fset hook (lambda ()
(when (buffer-live-p buf)
(with-current-buffer buf
(remove-hook 'pre-command-hook hook)
(setq-local buffer-read-only t
dired-directory nil
buffer-file-name nil)))))
(add-hook 'pre-command-hook hook)))
buf)))
(remove-hook 'window-selection-change-functions hook)
(pcase-dolist (`(,_ . ,buf) temporary-buffers)
(kill-buffer buf))
(setq temporary-buffers nil)))))