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

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

[elpa] externals/dired-preview 3f2588abb3 32/67: Make all preview state


From: ELPA Syncer
Subject: [elpa] externals/dired-preview 3f2588abb3 32/67: Make all preview state be handled by the trigger
Date: Sat, 8 Jul 2023 15:57:53 -0400 (EDT)

branch: externals/dired-preview
commit 3f2588abb3124ecb12b280261cc1985d4cd8d285
Author: Protesilaos Stavrou <info@protesilaos.com>
Commit: Protesilaos Stavrou <info@protesilaos.com>

    Make all preview state be handled by the trigger
    
    This way we simplify other functions, while making the open/close
    behaviour predictable.
    
    Thanks to Bruno Boal for taking a look into this with me:
    <https://git.sr.ht/~bboal>.  This was done in a private channel and
    the information is shared with permission.
---
 dired-preview.el | 83 +++++++++++++++++++++++++-------------------------------
 1 file changed, 37 insertions(+), 46 deletions(-)

diff --git a/dired-preview.el b/dired-preview.el
index b61f5ded41..81adeee873 100644
--- a/dired-preview.el
+++ b/dired-preview.el
@@ -181,14 +181,6 @@ See user option `dired-preview-ignored-extensions-regexp'."
               (window (get-buffer-window buffer)))
     (window-live-p window)))
 
-(defun dired-preview--preview-p (file)
-  "Return non-nil if FILE can be previewed."
-  (and (file-exists-p file)
-       (not (file-directory-p file))
-       (not (dired-preview--file-displayed-p file))
-       (not (dired-preview--file-ignored-p file))
-       (not (dired-preview--file-large-p file))))
-
 (defun dired-preview--delete-windows ()
   "Delete preview windows."
   (mapc
@@ -213,11 +205,8 @@ See user option `dired-preview-ignored-extensions-regexp'."
   (dired-preview--delete-windows))
 
 (defun dired-preview--return-preview-buffer (file)
-  "Return buffer to preview FILE in.
-Determine the propriety of this action by checking that FILE
-conforms with `dired-preview--preview-p'."
-  (when (dired-preview--preview-p file)
-    (dired-preview--add-to-previews file)))
+  "Return buffer to preview FILE in."
+  (dired-preview--add-to-previews file))
 
 (defun dired-preview--close-previews-outside-dired ()
   "Call `dired-preview--close-previews' if BUFFER is not in Dired mode."
@@ -234,31 +223,13 @@ conforms with `dired-preview--preview-p'."
 (defun dired-preview--display-buffer (buffer)
   "Call `display-buffer' for BUFFER.
 Only do it with the current major mode is Dired."
-  ;; We check for `dired-mode' because we want to avoid the scenario
-  ;; where the user switches to another buffer/window/frame before the
-  ;; timer elapses.
-  (when-let* (((eq major-mode 'dired-mode))
-              ;; FIXME 2023-06-29: We check again for the file in Dired
-              ;; because this function runs on a timer and we only want
-              ;; it to happen if the file at point is still the one we
-              ;; were about to display.  There probably is a better way
-              ;; of doing things, given that `dired-file-name-at-point'
-              ;; is called by the `dired-preview-display-file' that
-              ;; ultimately calls this one.
-              (file (dired-file-name-at-point))
-              ((eq buffer (get-file-buffer file))))
-    (display-buffer
-     buffer
-     dired-preview-display-action-alist)
-    (dired-preview-set-up-preview-window buffer)))
-
-(defun dired-preview-display-file ()
-  "Display preview of `dired-file-name-at-point' if appropriate.
-Return buffer object of displayed buffer."
-  (if-let* ((file (dired-file-name-at-point))
-            (buffer (dired-preview--return-preview-buffer file)))
-        (dired-preview--display-buffer buffer)
-    (dired-preview--close-previews)))
+  (display-buffer buffer dired-preview-display-action-alist)
+  (dired-preview-set-up-preview-window buffer))
+
+(defun dired-preview-display-file (file)
+  "Display preview of FILE if appropriate."
+  (when-let ((buffer (dired-preview--return-preview-buffer file)))
+    (dired-preview--display-buffer buffer)))
 
 (defvar dired-preview-trigger-commands
   '(dired-next-line dired-previous-line dired-mark dired-goto-file)
@@ -272,18 +243,38 @@ Return buffer object of displayed buffer."
   (when (timerp dired-preview--timer)
     (cancel-timer dired-preview--timer)))
 
-(defun dired-preview-trigger ()
-  "Trigger display of file at point after `dired-preview-trigger-commands'."
-  (if (and (eq major-mode 'dired-mode)
+(defun dired-preview--preview-p (file)
+  "Return non-nil if FILE can be previewed."
+  (and (file-exists-p file)
+       (not (file-directory-p file))
+       (not (dired-preview--file-displayed-p file))
+       (not (dired-preview--file-ignored-p file))
+       (not (dired-preview--file-large-p file))))
+
+(defun dired-preview-trigger (&optional no-delay)
+  "Trigger display of file at point after `dired-preview-trigger-commands'.
+With optional NO-DELAY do not start a timer.  Otherwise produce
+the preview with `dired-preview-delay' of idleness."
+  (dired-preview--cancel-timer)
+  (let* ((file (dired-file-name-at-point)))
+    (cond
+     ((and file
+           (dired-preview--preview-p file)
            (memq this-command dired-preview-trigger-commands))
-      (progn
-        (dired-preview--cancel-timer)
+      (if no-delay
+          (dired-preview-display-file file)
         (setq dired-preview--timer
               (run-with-idle-timer
                dired-preview-delay
                nil
-               #'dired-preview-display-file)))
-    (dired-preview--close-previews-outside-dired)))
+               #'dired-preview-display-file
+               file))))
+     ((and file
+           (not (dired-preview--preview-p file))
+           (eq major-mode 'dired-mode))
+      (dired-preview--close-previews))
+     (t
+      (dired-preview--close-previews-outside-dired)))))
 
 (defun dired-preview-disable-preview ()
   "Disable Dired preview."
@@ -298,7 +289,7 @@ Return buffer object of displayed buffer."
     (error "Can only use `dired-preview' in Dired"))
   (add-hook 'post-command-hook #'dired-preview-trigger nil :local)
   (add-hook 'post-command-hook #'dired-preview--close-previews-outside-dired 
nil :local)
-  (dired-preview-display-file))
+  (dired-preview-trigger :no-delay))
 
 ;;;###autoload
 (define-minor-mode dired-preview-mode



reply via email to

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