branch: externals/dired-preview
commit 6b5890c621107d616aaa12e4084df17f90b16379
Author: Protesilaos Stavrou <i...@protesilaos.com>
Commit: Protesilaos Stavrou <i...@protesilaos.com>

    Make preview not interfere with dired-dwim-target by defining a 
buffer-local function for that
---
 dired-preview.el | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/dired-preview.el b/dired-preview.el
index d874ae1088..90ae89bd97 100644
--- a/dired-preview.el
+++ b/dired-preview.el
@@ -201,6 +201,29 @@ can affect performance."
   "Return buffers that show previews."
   (seq-filter #'buffer-live-p dired-preview--buffers))
 
+(defun dired-preview--get-directories ()
+  "Return directories from preview buffers."
+  (when-let* ((buffers (dired-preview--get-buffers)))
+    (delq nil
+          (mapcar
+           (lambda (buffer)
+             (with-current-buffer buffer
+               (when (derived-mode-p 'dired-mode)
+                 (dired-current-directory))))
+           buffers))))
+
+(declare-function dired-dwim-target-next "dired-aux" (&optional all-frames))
+
+(defun dired-preview-get-future-history ()
+  "Function for `dired-dwim-target' to get directories."
+  (let ((target-directories (dired-dwim-target-next :all-frames)))
+    (if-let* ((preview-directories (dired-preview--get-directories)))
+        (seq-remove
+         (lambda (file)
+           (member file preview-directories))
+         target-directories)
+      target-directories)))
+
 (defun dired-preview--get-buffer-cumulative-size (buffers)
   "Return cumulative size of BUFFERS."
   (let ((size 0))
@@ -764,6 +787,7 @@ the preview with `dired-preview-delay' of idleness."
   (when (and other-window-scroll-default
              (eq other-window-scroll-default #'dired-preview-get-first-window))
     (setq-local other-window-scroll-default nil))
+  (setq-local dired-dwim-target nil)
   (remove-hook 'post-command-hook #'dired-preview-trigger :local)
   (dired-preview--close-previews)
   (put 'dired-preview-start 'function-executed nil))
@@ -774,6 +798,7 @@ the preview with `dired-preview-delay' of idleness."
     (user-error "Can only use `dired-preview' in Dired"))
   (when (>= emacs-major-version 29)
     (setq-local other-window-scroll-default #'dired-preview-get-first-window))
+  (setq-local dired-dwim-target #'dired-preview-get-future-history)
   (add-hook 'post-command-hook #'dired-preview-trigger nil :local)
   (dired-preview-trigger :no-delay))
 

Reply via email to