[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
- [elpa] externals/dired-preview 1d3befd70c 20/67: Make sure to unset delayed-mode-hooks after they are ran, (continued)
- [elpa] externals/dired-preview 1d3befd70c 20/67: Make sure to unset delayed-mode-hooks after they are ran, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview bf25ef53e1 23/67: Run the preview on an idle timer, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview 3ba4c3f533 25/67: Add FIXME to preview only when it is still the current one, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview 837d3c7e94 14/67: Rename private function, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview 8d545491d4 05/67: Update documentation to match commit 3304286 (command+keymap removal), ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview a653299672 09/67: Do not preview already visible file, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview 16a2e9e835 18/67: Fix test for current command in dired-preview-trigger, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview 5ffcfb0c85 24/67: Tweak the format of the timer call, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview e2da14de12 30/67: Fix scope of action to close preview upon buffer switch, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview 75f1b11e99 29/67: Add FIXME for the scope of dired-preview--close-previews-outside-dired, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview 3f2588abb3 32/67: Make all preview state be handled by the trigger,
ELPA Syncer <=
- [elpa] externals/dired-preview 49bea8f6d4 34/67: Delete windows, then kill buffers, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview 070f02a1b0 42/67: Stop changing the mode-line-format, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview 5338f5c1a7 26/67: Make commit 3ba4c3f more resilient, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview ec09d4b856 27/67: Fix how delayed-mode-hooks are handled, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview b367550663 28/67: Rewrite how the timer is started, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview c20af9c9eb 31/67: Fix how the window is set up and closed outside Dired, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview 8c1c73716e 37/67: Tighten the event loop to avoid inconsistencies, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview 18b607fc48 40/67: Simplify dired-preview-return-window-size, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview 86e11c105b 41/67: Make dired-preview-display-file delete windows eagerly, ELPA Syncer, 2023/07/08
- [elpa] externals/dired-preview ca176e11e4 36/67: Simplify dired-preview--run-mode-hooks, ELPA Syncer, 2023/07/08