branch: externals/consult
commit 5908d5f0b7d1d2f25c9055156aeeab95ae013166
Author: Daniel Mendler <[email protected]>
Commit: Daniel Mendler <[email protected]>

    Introduce consult-preview-variables (Fix #538)
---
 README.org |  1 +
 consult.el | 41 ++++++++++++++++++++++++++++-------------
 2 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/README.org b/README.org
index b9795887c1..d88e271d15 100644
--- a/README.org
+++ b/README.org
@@ -949,6 +949,7 @@ configuration examples.
  | consult-preview-max-count        | Maximum number of files to keep open 
during preview   |
  | consult-preview-max-size         | Files larger than this size are not 
previewed         |
  | consult-preview-raw-size         | Files larger than this size are 
previewed in raw form |
+ | consult-preview-variables        | Alist of variables to bind during 
preview             |
  | consult-project-buffer-sources   | List of virtual project buffer sources   
             |
  | consult-project-function         | Function which returns current project 
root           |
  | consult-recent-file-filter       | Filter for =consult-recent-file=         
               |
diff --git a/consult.el b/consult.el
index c298c8d8d5..cf011e04ee 100644
--- a/consult.el
+++ b/consult.el
@@ -306,6 +306,15 @@ The dynamically computed arguments are appended."
   "List of `find-file' hooks, which should be executed during file preview."
   :type '(repeat symbol))
 
+(defcustom consult-preview-variables
+  '((inhibit-message . t)
+    (enable-dir-local-variables . nil)
+    (enable-local-variables . nil)
+    (non-essential . t)
+    (delay-mode-hooks . t))
+  "Variables which are bound for file preview."
+  :type '(alist :key-type symbol))
+
 (defcustom consult-bookmark-narrow
   `((?f "File" ,#'bookmark-default-handler)
     (?h "Help" ,#'help-bookmark-jump)
@@ -1117,23 +1126,29 @@ MARKER is the cursor position."
 
 (defun consult--find-file-temporarily (name)
   "Open file NAME temporarily for preview."
-  (cl-letf ((inhibit-message t)
-            (enable-dir-local-variables nil)
-            (enable-local-variables nil)
-            (non-essential t)
-            ((default-value 'delay-mode-hooks) t)
+  (cl-letf ((orig (mapcar (pcase-lambda (`(,k . ,_))
+                            (list k (default-value k) (symbol-value k)))
+                          consult-preview-variables))
             ((default-value 'find-file-hook)
              (seq-filter (lambda (x)
                            (memq x consult-preview-allowed-hooks))
                          (default-value 'find-file-hook))))
-    ;; 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)
-          (find-file-noselect name 'nowarn (> size consult-preview-raw-size))
-        (message "File `%s' (%s) is too large for preview"
-                 name (file-size-human-readable size))
-        nil))))
+    (unwind-protect
+        (progn
+          (pcase-dolist (`(,k . ,v) consult-preview-variables)
+            (set-default k v)
+            (set k v))
+          ;; 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)
+                (find-file-noselect name 'nowarn (> size 
consult-preview-raw-size))
+              (message "File `%s' (%s) is too large for preview"
+                       name (file-size-human-readable size))
+              nil)))
+      (pcase-dolist (`(,k ,_ ,d ,v) orig)
+        (set-default k d)
+        (set k v)))))
 
 (defun consult--temporary-files ()
   "Return a function to open files temporarily for preview."

Reply via email to