emacs-elpa-diffs
[Top][All Lists]
Advanced

[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'.")
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]