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

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

[elpa] externals/dired-preview 29829a63c8 56/67: Refactor how parameters


From: ELPA Syncer
Subject: [elpa] externals/dired-preview 29829a63c8 56/67: Refactor how parameters are set
Date: Sat, 8 Jul 2023 15:57:55 -0400 (EDT)

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

    Refactor how parameters are set
    
    This should fix inconsistencies with how preview windows are treated.
    I want them to be deleted at all times as soon as we are out of Dired.
    
    Before, this was not working with mouse clicking to focus a window, so
    I tried to generally not close previews.  That caused effects that I
    would consider counter-intuitive.  I prefer preview windows to be
    "ephemeral" and thus be treated specially.
---
 dired-preview.el | 58 ++++++++++++++++++++++++++++++++------------------------
 1 file changed, 33 insertions(+), 25 deletions(-)

diff --git a/dired-preview.el b/dired-preview.el
index 3d58a0e003..c4a0ff8f16 100644
--- a/dired-preview.el
+++ b/dired-preview.el
@@ -114,17 +114,23 @@ details."
         (delay-mode-hooks t))
     (find-file-noselect file :nowarn)))
 
+(defun dired-preview--set-window-parameters (window value)
+  "Set desired WINDOW parameters to VALUE."
+  (with-selected-window window
+    (set-window-parameter window 'dired-preview-window value)
+    (set-window-parameter window 'dedicated value)
+    (set-window-parameter window 'no-other-window value)))
+
 (defun dired-preview--run-mode-hooks ()
   "Run mode hooks in current buffer, if `delayed-mode-hooks' is non-nil."
-  (when (and delay-mode-hooks (current-buffer))
-    ;; FIXME 2023-07-05: When we remove the window parameters, we
-    ;; disconnect the window from the preview.  Then what is the point
-    ;; of trying to close previews outside of Dired?  Which previews?
-    (set-window-parameter (selected-window) 'dired-preview-window nil)
-    (set-window-parameter (selected-window) 'dedicated nil)
+  (cond
+   ((window-parameter (selected-window) 'dired-preview-window)
+    (dired-preview--delete-windows))
+   ((and delay-mode-hooks (current-buffer))
+    (dired-preview--set-window-parameters (selected-window) nil)
     (apply #'run-hooks (delete-dups delayed-mode-hooks))
     (kill-local-variable 'delayed-mode-hooks)
-    (remove-hook 'post-command-hook #'dired-preview--run-mode-hooks :local)))
+    (remove-hook 'post-command-hook #'dired-preview--run-mode-hooks :local))))
 
 (defun dired-preview--add-to-previews (file)
   "Add FILE to `dired-preview--buffers', if not already in a buffer.
@@ -132,11 +138,11 @@ Always return FILE buffer."
   (let ((buffer (find-buffer-visiting file)))
     (if (buffer-live-p buffer)
         buffer
-      (setq buffer (dired-preview--find-file-no-select file))
-      (with-current-buffer buffer
-        (add-hook 'post-command-hook #'dired-preview--run-mode-hooks nil 
:local))
-      (add-to-list 'dired-preview--buffers buffer)
-      buffer)))
+      (setq buffer (dired-preview--find-file-no-select file)))
+    (with-current-buffer buffer
+      (add-hook 'post-command-hook #'dired-preview--run-mode-hooks nil :local))
+    (add-to-list 'dired-preview--buffers buffer)
+    buffer))
 
 (defun dired-preview--get-buffers ()
   "Return buffers that show previews."
@@ -193,17 +199,16 @@ checked against `split-width-threshold' or
             ((>= width (window-body-height)))
             ((>= width split-width-threshold)))
       `(:side right :dimension window-width :size 
,(dired-preview-return-window-size :width))
-    `(:side below :dimension window-height :size 
,(dired-preview-return-window-size :height))))
+    `(:side bottom :dimension window-height :size 
,(dired-preview-return-window-size :height))))
 
 (defun dired-preview-display-action-alist-dwim ()
   "Reference function for `dired-preview-display-action-alist-function'.
 Return a `display-buffer' action alist, as described in the
 aforementioned user option."
   (let ((properties (dired-preview-display-action-side)))
-    `((display-buffer-in-direction)
-      (direction . ,(plist-get properties :side))
-      (,(plist-get properties :dimension) . ,(plist-get properties :size))
-      (dedicated . t))))
+    `((display-buffer-in-side-window)
+      (side . ,(plist-get properties :side))
+      (,(plist-get properties :dimension) . ,(plist-get properties :size)))))
 
 (defvar dired-preview-trigger-commands
   '(dired-next-line dired-previous-line dired-mark dired-goto-file)
@@ -233,12 +238,16 @@ aforementioned user option."
   "Kill preview buffers."
   (mapc
    (lambda (buffer)
-     (when (and (not (eq buffer (current-buffer)))
-                (dired-preview--window-parameter-p (get-buffer-window buffer)))
-       (ignore-errors
-         (kill-buffer-if-not-modified buffer))))
-   (dired-preview--get-buffers))
-  (setq dired-preview--buffers nil))
+     (let ((window (get-buffer-window buffer)))
+       (cond
+        ((and (dired-preview--window-parameter-p window)
+              (current-buffer))
+         (delete-window (get-buffer-window buffer)))
+        ((dired-preview--window-parameter-p window)
+         (ignore-errors
+           (kill-buffer-if-not-modified buffer)
+           (setq dired-preview--buffers (delq buffer 
dired-preview--buffers)))))))
+     (dired-preview--get-buffers)))
 
 (defun dired-preview--close-previews ()
   "Kill preview buffers and delete their windows."
@@ -266,8 +275,7 @@ Only do it with the current major mode is Dired."
   (when-let ((buffer (dired-preview--return-preview-buffer file)))
     (dired-preview--display-buffer buffer)
     (when-let ((window (get-buffer-window buffer)))
-      (with-selected-window window
-        (set-window-parameter window 'dired-preview-window :preview)))))
+      (dired-preview--set-window-parameters window t))))
 
 (defun dired-preview--preview-p (file)
   "Return non-nil if FILE can be previewed."



reply via email to

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