branch: externals/dired-preview commit 3304286c175387602032a15a7d1888473ca054b0 Author: Protesilaos Stavrou <i...@protesilaos.com> Commit: Protesilaos Stavrou <i...@protesilaos.com>
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)))