emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 7a5c91a2831 2/2: * lisp/dired.el (dired-context-menu): Add menu i


From: Juri Linkov
Subject: master 7a5c91a2831 2/2: * lisp/dired.el (dired-context-menu): Add menu item "Open With" (bug#63911).
Date: Mon, 27 Nov 2023 12:37:14 -0500 (EST)

branch: master
commit 7a5c91a2831602c3cd961158cf0b6a876852d7ac
Author: Juri Linkov <juri@linkov.net>
Commit: Juri Linkov <juri@linkov.net>

    * lisp/dired.el (dired-context-menu): Add menu item "Open With" (bug#63911).
    
    Populate the menu item "Open With" with commands returned
    by 'shell-command-guess' on the current file name.
---
 lisp/dired.el | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/lisp/dired.el b/lisp/dired.el
index 6eecba1f96a..97645c731c8 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -2595,13 +2595,28 @@ Do so according to the former subdir alist 
OLD-SUBDIR-ALIST."
   "Populate MENU with Dired mode commands at CLICK."
   (when (mouse-posn-property (event-start click) 'dired-filename)
     (define-key menu [dired-separator] menu-bar-separator)
-    (let ((easy-menu (make-sparse-keymap "Immediate")))
+    (let* ((filename (save-excursion
+                       (mouse-set-point click)
+                       (dired-get-filename nil t)))
+           (commands (shell-command-guess (list filename)))
+           (easy-menu (make-sparse-keymap "Immediate")))
       (easy-menu-define nil easy-menu nil
-        '("Immediate"
+        `("Immediate"
           ["Find This File" dired-mouse-find-file
            :help "Edit file at mouse click"]
           ["Find in Other Window" dired-mouse-find-file-other-window
-           :help "Edit file at mouse click in other window"]))
+           :help "Edit file at mouse click in other window"]
+          ,@(when commands
+              (list (cons "Open With"
+                          (append
+                           (mapcar (lambda (command)
+                                     `[,(or (get-text-property 0 'name command)
+                                            command)
+                                       (lambda ()
+                                         (interactive)
+                                         (dired-do-async-shell-command
+                                          ,command nil (list ,filename)))])
+                                   commands)))))))
       (dolist (item (reverse (lookup-key easy-menu [menu-bar immediate])))
         (when (consp item)
           (define-key menu (vector (car item)) (cdr item))))))



reply via email to

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