emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/consult 0150ab6d4e 2/2: Improve robustness of consult--


From: ELPA Syncer
Subject: [elpa] externals/consult 0150ab6d4e 2/2: Improve robustness of consult--temporary-file
Date: Tue, 15 Feb 2022 20:57:26 -0500 (EST)

branch: externals/consult
commit 0150ab6d4eb2214b888f639f71268b8f1d421182
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    Improve robustness of consult--temporary-file
---
 consult.el | 42 +++++++++++++++++++++++++-----------------
 1 file changed, 25 insertions(+), 17 deletions(-)

diff --git a/consult.el b/consult.el
index 8e5c34eecf..a9a96a92df 100644
--- a/consult.el
+++ b/consult.el
@@ -1070,6 +1070,7 @@ MARKER is the cursor position."
 (defun consult--temporary-files ()
   "Return a function to open files temporarily."
   (let* ((new-buffers)
+         (old-buffers (buffer-list))
          (dir default-directory))
     (lambda (&optional name)
       (if name
@@ -1078,26 +1079,33 @@ MARKER is the cursor position."
                 (enable-dir-local-variables nil)
                 (enable-local-variables (and enable-local-variables :safe))
                 (non-essential t))
-            (or (get-file-buffer 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)
+            (or
+             ;; get-file-buffer is only a small optimization here. It
+             ;; may not find the actual buffer, for directories it
+             ;; returns nil instead of returning the Dired buffer.
+             (get-file-buffer 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)
                       (prog1 nil
                         (message "File `%s' (%s) is too large for preview"
                                  name (file-size-human-readable size)))
-                    (cl-letf* (((default-value 'find-file-hook)
-                                (seq-remove (lambda (x) (memq x 
consult-preview-excluded-hooks))
-                                            (default-value 'find-file-hook)))
-                               (buf (find-file-noselect
-                                     name 'nowarn
-                                     (> size consult-preview-raw-size))))
-                      (push buf new-buffers)
-                      ;; Only keep a few buffers alive
-                      (while (> (length new-buffers) consult-preview-max-count)
-                        (consult--kill-clean-buffer (car (last new-buffers)))
-                        (setq new-buffers (nbutlast new-buffers)))
-                      buf)))))
+                 (cl-letf* (((default-value 'find-file-hook)
+                             (seq-remove (lambda (x)
+                                           (memq x 
consult-preview-excluded-hooks))
+                                         (default-value 'find-file-hook)))
+                            (buf (find-file-noselect
+                                  name 'nowarn
+                                  (> size consult-preview-raw-size))))
+                   ;; Only add new buffer if not already in the list
+                   (unless (or (memq buf new-buffers) (memq buf old-buffers))
+                     (push buf new-buffers)
+                     ;; Only keep a few buffers alive
+                     (while (> (length new-buffers) consult-preview-max-count)
+                       (consult--kill-clean-buffer (car (last new-buffers)))
+                       (setq new-buffers (nbutlast new-buffers))))
+                   buf)))))
         (mapc #'consult--kill-clean-buffer new-buffers)))))
 
 (defun consult--invisible-open-permanently ()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]