branch: externals/dired-preview
commit 8f238477686ad94ad8978e634a6f3d690ca4017c
Author: Protesilaos Stavrou <[email protected]>
Commit: Protesilaos Stavrou <[email protected]>
Remove the advice system to restore buffer-local mode
This commit changes the approach that was followed for commit 3304286.
The intention is to still get the same result, but do it in a way that
preserves the original design of a buffer-local minor mode.
This follows from the discussion with Christian Tietze:
<https://lists.sr.ht/~protesilaos/general-issues/%3Cm1zg4noej2.fsf%40christiantietze.de%3E>.
---
dired-preview.el | 25 +++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)
diff --git a/dired-preview.el b/dired-preview.el
index 5171596ce2..cea218a573 100644
--- a/dired-preview.el
+++ b/dired-preview.el
@@ -263,37 +263,38 @@ Only do it with the current major mode is Dired."
(run-with-timer dired-preview-delay nil
#'dired-preview--display-buffer buffer)))
-(defun dired-preview-display-file (&rest _)
+(defun dired-preview-display-file ()
"Display preview of `dired-file-name-at-point' if appropriate.
-Return buffer object of displayed buffer. Ignore any arguments.
-
-Use this as advice after relevant Dired commands (see
-`dired-preview-enable-preview', `dired-preview-disable-preview')."
+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-with-delay buffer)
(dired-preview--close-previews)))
+(defvar dired-preview-trigger-commands
+ '(dired-next-line dired-previous-line dired-mark dired-goto-file)
+ "List of Dired commands that trigger a preview.")
+
+(defun dired-preview-trigger ()
+ "Trigger display of file at point after `dired-preview-trigger-commands'."
+ (when (memq last-command dired-preview-trigger-commands)
+ (dired-preview-display-file)))
+
(defun dired-preview-disable-preview ()
"Disable Dired preview."
(unless (eq major-mode 'dired-mode)
(error "Can only use `dired-preview' in Dired"))
- (dolist (command '(dired-next-line dired-previous-line dired-mark
dired-goto-file))
- (advice-remove command #'dired-preview-display-file))
+ (remove-hook 'post-command-hook #'dired-preview-trigger :local)
(dired-preview--close-previews))
(defun dired-preview-enable-preview ()
"Enable Dired preview."
(unless (eq major-mode 'dired-mode)
(error "Can only use `dired-preview' in Dired"))
- (dolist (command '(dired-next-line dired-previous-line dired-mark
dired-goto-file))
- (advice-add command :after #'dired-preview-display-file))
+ (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))
-;; FIXME 2023-06-28: The :global nil and the `advice-add' contradict
-;; each other. I still prefer a buffer-local mode and must thus
-;; arrange for the same job via the `post-command-hook'.
;;;###autoload
(define-minor-mode dired-preview-mode
"Buffer-local mode to preview file at point in Dired."