[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/dired-preview d59dcbc084 2/5: Add dired-preview-open-dw
From: |
ELPA Syncer |
Subject: |
[elpa] externals/dired-preview d59dcbc084 2/5: Add dired-preview-open-dwim command |
Date: |
Mon, 29 Jul 2024 12:57:57 -0400 (EDT) |
branch: externals/dired-preview
commit d59dcbc084d65f91048ef90bc93d4297ceb412f2
Author: Protesilaos Stavrou <info@protesilaos.com>
Commit: Protesilaos Stavrou <info@protesilaos.com>
Add dired-preview-open-dwim command
---
dired-preview.el | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 65 insertions(+), 4 deletions(-)
diff --git a/dired-preview.el b/dired-preview.el
index cd321257a6..8399d19877 100644
--- a/dired-preview.el
+++ b/dired-preview.el
@@ -288,9 +288,11 @@ FILE."
(with-selected-window win
,@body)))
-(defun dired-preview-visit ()
- "Visit the currently previewed buffer.
-This means that the buffer is no longer among the previews."
+(defun dired-preview-find-file ()
+ "Visit the currently previewed buffer with `find-file'.
+This means that the buffer is no longer among the previews.
+
+Also see `dired-preview-open-dwim'."
(interactive)
(let (file buffer)
(dired-preview-with-window
@@ -299,6 +301,64 @@ This means that the buffer is no longer among the
previews."
(setq buffer (find-file-noselect file)))
(pop-to-buffer buffer)))
+(defvar dired-preview-media-extensions-regexp
+ "\\.\\(mp3\\|m4a\\|flac\\|mp4\\|ogg\\|mpv\\|webm\\|mov\\|wav\\)"
+ "Regular expression matching media file extensions.")
+
+(declare-function w32-shell-execute "w32fns.c")
+
+;; NOTE 2024-07-29: Adapted from the `dired-do-open' found in Emacs 31.0.50.
+(defun dired-preview--open-externally (file)
+ "Run appropriate command to open FILE externally."
+ (if-let ((command (cond
+ ((executable-find "xdg-open")
+ "xdg-open")
+ ((memq system-type '(gnu/linux darwin))
+ "open")
+ ((memq system-type '(windows-nt ms-dos))
+ "start")
+ ((eq system-type 'cygwin)
+ "cygstart")
+ ((executable-find "run-mailcap")
+ "run-mailcap"))))
+ (cond
+ ((memq system-type '(gnu/linux))
+ (call-process command nil 0 nil file))
+ ((memq system-type '(ms-dos))
+ (shell-command (concat command " " (shell-quote-argument file))))
+ ((memq system-type '(windows-nt))
+ (w32-shell-execute command (convert-standard-filename file)))
+ ((memq system-type '(cygwin))
+ (call-process command nil nil nil file))
+ ((memq system-type '(darwin))
+ (start-process (concat command " " file) nil command file)))
+ (error "Cannot find a command to open `%s' externally" file)))
+
+(defun dired-preview-open-dwim ()
+ "Do-What-I-Mean open the currently previewed file.
+This means that the buffer is no longer among the previews.
+
+If the file name matches `dired-preview-media-extensions-regexp',
+`dired-preview-ignored-extensions-regexp', or
+`dired-preview-image-extensions-regexp', then open it externally.
+Otherwise, visit the file in an Emacs buffer.
+
+Also see `dired-preview-find-file'."
+ (interactive)
+ (let (buffer)
+ (dired-preview-with-window
+ (when-let ((file buffer-file-name))
+ (cond
+ ((or (string-match-p dired-preview-media-extensions-regexp file)
+ (string-match-p dired-preview-ignored-extensions-regexp file)
+ (string-match-p dired-preview-image-extensions-regexp file))
+ (dired-preview--open-externally file))
+ (t
+ (dired-preview--close-previews-outside-dired)
+ (setq buffer (find-file-noselect file))))))
+ (when buffer
+ (pop-to-buffer buffer))))
+
(declare-function hexl-mode "hexl")
(declare-function hexl-mode-exit "hexl" (&optional arg))
@@ -534,7 +594,8 @@ the preview with `dired-preview-delay' of idleness."
(defvar dired-preview-mode-map
(let ((map (make-sparse-keymap)))
(define-key map (kbd "C-c C-c") #'dired-preview-hexl-toggle)
- (define-key map (kbd "C-c C-o") #'dired-preview-visit)
+ (define-key map (kbd "C-c C-f") #'dired-preview-find-file)
+ (define-key map (kbd "C-c C-o") #'dired-preview-open-dwim)
map)
"Key map for `dired-preview-mode'.")