branch: externals/dired-preview
commit 3304286c175387602032a15a7d1888473ca054b0
Author: Protesilaos Stavrou <[email protected]>
Commit: Protesilaos Stavrou <[email protected]>
Use an advice instead of defining new commands; delete our keymap
This is the same ideas as in commit ae93720, except more generalised.
Instead of defining our own commands, we advise Dired to display a
preview after one of its standard commands is called. This way we
avoid the problem where the key remap mechanism does not actually
remap all keys associated with a given command.[1][2]
[1] Thanks to Peter Prevos for reporting this in issue 1 on the GitHub
mirror: <https://github.com/protesilaos/dired-preview/issues/1>.
[2] Thanks to Christian Tietze and Ed Hamilton for discussing this
with me on the mailing list:
<https://lists.sr.ht/~protesilaos/general-issues/%3Cm1zg4noej2.fsf%40christiantietze.de%3E>.
Commit ae93720 by Christian Tietze is based on this discussion.
---
dired-preview.el | 50 +++++++++++++-------------------------------------
1 file changed, 13 insertions(+), 37 deletions(-)
diff --git a/dired-preview.el b/dired-preview.el
index 9e6501c7bc..8c2e57bea9 100644
--- a/dired-preview.el
+++ b/dired-preview.el
@@ -242,62 +242,38 @@ Only do it with the current major mode is Dired."
(run-with-timer dired-preview-delay nil
#'dired-preview--display-buffer-action buffer)))
-(defun dired-preview--display-file (&optional file)
- "Display preview of file if appropriate.
-
-File is either FILE or the value of `dired-file-name-at-point'.
-
-Return buffer object of displayed buffer."
- (if-let* ((f (or file (dired-file-name-at-point)))
- (buffer (dired-preview--return-preview-buffer f)))
+(defun dired-preview-display-file (&rest _)
+ "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')."
+ (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)))
-(defun dired-preview--display-file-after-mark (&rest args)
- "Preview file at point in dired buffer after a mark was changed."
- (dired-preview--display-file))
-
(defun dired-preview-disable-preview ()
"Disable preview."
(unless (eq major-mode 'dired-mode)
(error "Can only use `dired-preview' in Dired"))
- (advice-remove #'dired-mark #'dired-preview--display-file-after-mark)
+ (dolist (command '(dired-next-line dired-previous-line dired-mark
dired-goto-file))
+ (advice-remove command #'dired-preview-display-file))
(dired-preview--close-previews))
(defun dired-preview-enable-preview ()
"Enable preview and store window configuration."
(unless (eq major-mode 'dired-mode)
(error "Can only use `dired-preview' in Dired"))
- (advice-add #'dired-mark :after #'dired-preview--display-file-after-mark)
+ (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--close-previews-outside-dired
nil :local)
- (dired-preview--display-file))
-
-(defun dired-preview-next-file (number)
- "Preview next file in Dired.
-With optional numeric argument NUMBER move than many lines. Default is 1."
- (interactive "^p")
- (dired-next-line (or number 1))
- (dired-preview--display-file))
-
-(defun dired-preview-previous-file (number)
- "Preview previous file in Dired.
-With optional numeric argument NUMBER move than many lines. Default is 1."
- (interactive "^p")
- (dired-next-line (- (or number 1)))
- (dired-preview--display-file))
-
-(defvar dired-preview-mode-map
- (let ((map (make-sparse-keymap)))
- (define-key map [remap dired-next-line] #'dired-preview-next-file)
- (define-key map [remap dired-previous-line] #'dired-preview-previous-file)
- map)
- "Keymap for `dired-preview-mode'.")
+ (dired-preview-display-file))
;;;###autoload
(define-minor-mode dired-preview-mode
"Buffer-local mode to preview file at point in Dired."
:global nil
- :keymap dired-preview-mode-map
(if dired-preview-mode
(dired-preview-enable-preview)
(dired-preview-disable-preview)))