branch: externals/consult commit 776351b5ab6730ac5106925aaee287b841a64d40 Author: Daniel Mendler <m...@daniel-mendler.de> Commit: Daniel Mendler <m...@daniel-mendler.de>
consult--find-file-temporarily: Do not preview so-long files --- consult.el | 49 ++++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/consult.el b/consult.el index a8144929a6..7d8dee2f95 100644 --- a/consult.el +++ b/consult.el @@ -1129,31 +1129,38 @@ ORIG is the original function, HOOKS the arguments." (defun consult--find-file-temporarily (name) "Open file NAME temporarily for preview." - (let ((vars (delq nil - (mapcar (pcase-lambda (`(,k . ,v)) + (setq name (abbreviate-file-name (expand-file-name name))) + ;; file-attributes may throw permission denied error + (when-let* ((attrs (ignore-errors (file-attributes name))) + (size (file-attribute-size attrs))) + (if (<= size consult-preview-max-size) + (let* ((vars (delq nil + (mapcar + (pcase-lambda (`(,k . ,v)) (if (boundp k) (list k v (default-value k) (symbol-value k)) (message "consult-preview-variables: The variable `%s' is not bound" k) nil)) - consult-preview-variables)))) - ;; file-attributes may throw permission denied error - (when-let* ((attrs (ignore-errors (file-attributes name))) - (size (file-attribute-size attrs))) - (if (<= size consult-preview-max-size) - (unwind-protect - (progn - (advice-add #'run-hooks :around #'consult--filter-find-file-hook) - (pcase-dolist (`(,k ,v . ,_) vars) - (set-default k v) - (set k v)) - (find-file-noselect name 'nowarn (> size consult-preview-raw-size))) - (advice-remove #'run-hooks #'consult--filter-find-file-hook) - (pcase-dolist (`(,k ,_ ,d ,v) vars) - (set-default k d) - (set k v))) - (message "File `%s' (%s) is too large for preview" - name (file-size-human-readable size)) - nil)))) + consult-preview-variables))) + (buf (unwind-protect + (progn + (advice-add #'run-hooks :around #'consult--filter-find-file-hook) + (pcase-dolist (`(,k ,v . ,_) vars) + (set-default k v) + (set k v)) + (find-file-noselect name 'nowarn (> size consult-preview-raw-size))) + (advice-remove #'run-hooks #'consult--filter-find-file-hook) + (pcase-dolist (`(,k ,_ ,d ,v) vars) + (set-default k d) + (set k v))))) + (if (not (buffer-local-value 'so-long-detected-p buf)) + buf + (kill-buffer buf) + (message "File `%s' has long lines, not previewed" name) + nil)) + (message "File `%s' (%s) is too large for preview" + name (file-size-human-readable size)) + nil))) (defun consult--temporary-files () "Return a function to open files temporarily for preview."